入门ssh连接远程主机

1,031 阅读4分钟

ssh是什么?如何使用ssh连接远程服务器?

Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在应用层基础上的安全网络协议。它是专为远程登录会话(甚至可以用Windows远程登录Linux服务器进行文件互传)和其他网络服务提供安全性的协议,可有效弥补网络中的漏洞。通过SSH,可以把所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。目前已经成为Linux系统的标准配置。

SSH的安全机制

SSH之所以能够保证安全,原因在于它采用了非对称加密技术(RSA)加密了所有传输的数据。

传统的网络服务程序,如FTP、Pop和Telnet其本质上都是不安全的;因为它们在网络上用明文传送数据、用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击。就是存在另一个人或者一台机器冒充真正的服务器接收用户传给服务器的数据,然后再冒充用户把数据传给真正的服务器。

但并不是说SSH就是绝对安全的,因为它本身提供两种级别的验证方法:

第一种级别(基于口令的安全验证):只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人攻击”这种方式的攻击。

第二种级别(基于密钥的安全验证):你必须为自己创建一对密钥,并把公钥放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密钥进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公钥,然后把它和你发送过来的公钥进行比较。如果两个密钥一致,服务器就用公钥加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私钥在本地解密再把它发送给服务器完成登录。与第一种级别相比,第二种级别不仅加密所有传输的数据,也不需要在网络上传送口令,因此安全性更高,可以有效防止中间人攻击。

ssh 服务

ssh分为客户端和服务端,一般linux系统都自带安装了。安装方法按下不表。

ssh服务启动和停止的命令

# /etc/init.d 是ssh脚本的目录 macos的ssh脚本的目录不是这个
sudo /etc/init.d/ssh start  # 启动ssh
sudo /etc/init.d/ssh restart # 重启ssh
sudo /etc/init.d/ssh stop # 停止

两种使用ssh登录的方法

一、账户+口令 (密码)

口令登录非常简单,只需要一条命令,命令格式为: ssh 服务端端用户名@服务器ip地址 ,服务端用户名可以通过webshell,在终端查看。

ssh root@192.168.0.1

还要说明的是,SSH服务的默认端口是22,也就是说,如果你不设置端口的话登录请求会自动送到远程主机的22端口。我们可以使用 -p 选项来修改端口号,比如连接到服务器的1234端口:

ssh -p 1234 root@192.168.0.1

接下来会要求输入密码,输入密码后就连接上了。

我们可以通过 Ctrl+D 或者 exit 命令退出远程登录

二、公钥登录

每次登录远程主机都需要输入密码是很不方便的,如果想要省去这一步骤,可以利用密钥对进行连接,还可以提高安全性。

这个公钥与秘钥,和配置git时生成的是一个意思。userRoot/.ssh/目录下有的话,就不用重新生成秘钥对了。直接复制公钥id_rsa.pub到服务器上就行。

如何将公钥放到服务器上,有几种方式。

1、通过命令ssh-copy-id,格式:ssh-copy-id [-i [identity_file]] [user@]machine,例子

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.1

然后会要求像普通登录那样输入密码。这个命令做的事就是,登录然后将公钥写入远程主机的~/ .ssh/authorized_key 文件中。所以也可以手动执行这一步。

2、复制公钥,然后登录远程主机(webshell或者口令登录),然后手动在~/ .ssh/authorized_key 文件中添加公钥字符串。

3、许多云服务厂商提供了页面操作添加ssh密钥的功能,以青云为例。

image.png

可以直接复制粘贴公钥。也可以使用新的密钥对,这样的话还需要将生成的密钥写到本地电脑的文件里,如果不是默认路径~/.ssh/id_rsa文件的话,需要在ssh命令中手动指定ssh密钥文件。

ssh -i ~/.ssh/my_new_id_rsa root@192.168.0.1