SSH的运用

来源:互联网 发布:java微信昵称特殊字符 编辑:程序博客网 时间:2024/06/01 12:26

Secure Shell

SSH是一种用于计算机加密登录的网络协议,为Linux系统的一项标准配置。SSH仅仅是一种协议,存在多种实现。在Linux系统上应用比较广泛的是开源实现OpenSSH。
SSH采用了公钥加密的机制来保证会话的安全:
1、当远程主机接受到用户的登录请求时,则把自己的公钥(有主机自己签发)发送给用户;
2、用户使用公钥对登录密码进行加密;
3、远程主机使用私钥对用户发送的登录密码进行解密比对,验证登录请求的合法性。


远程登录

SSH的基本功能是进行加密的远程登录。命令如下:

$ ssh user@host

还可以省略用户名,用本地用户名进行登录:

$ ssh host

SSH的默认端口是22,当不指定端口时,将会默认采用这个端口。使用-p参数可以对端口进行指定。

$ ssh -p 2017 user@host

信任主机

与ssh有关的文件通常保存在Linux用户的家目录下的.ssh目录中($HOME/.ssh/),除了每个用户保有的ssh相关文件外,系统保有的ssh文件通常存放再/etc/ssh/目录下。
通常在进行第一次登录时,ssh会出现下面的提示:

$ ssh root@192.168.1.128The authenticity of host '192.168.1.128' can't be established.RSA key fingerprint is 97:2e:e7:e0:de:9f:af:67:28:c2:42:2e:34:56:58:4f.Are you sure you want to continue connecting (yes/no)?

这是因为ssh自身无法确认host主机的真实性,于是它告知用户该主机的公钥指纹,由用户自己决定是否信任主机。
为什么时公钥指纹而不是完整的公钥呢?因为通常公钥长度都比较长,例如RSA算法的公钥则由1024位,不利于人工比对。所以一般采用hash算法(如MD5)对其进行消息摘要生成较短的公钥指纹以便进行比对。
当主机被信任之后,其公钥就会被存入该用户.ssh目录下的known_hosts文件中,下次再登录该主机时系统就会识别出这是已经信任的主机了。

公钥登录(免密登录)

通常,直接登录主机每次都必须输入密码。有些情况下,我们需要实现免密登录来方便我们的操作。SSH提供了公钥登录的方式,用户将自己的公钥存储再远程主机上,当用户登录时,远程主机向用户发送随机字符串,用户用自己的私钥加密后再发回给远程主机,远程主机用事先存储的公钥加密后比对一致即可认定用户可信。

生成公钥

我们可以用ssh-keygen生成自己的公钥:

$ ssh-keygen

使用-t参数可以指定使用的公钥算法。还可以设置口令对私钥进行保护。
该命令默认会在.ssh目录下生成id_rsa.pubid_rsa两个文件,前者为公钥,后者为私钥。

传输公钥

将公钥传送到远程主机:

$ ssh-copy-id user@host

然后就可以使用公钥登录了。
有些情况下,远程主机并没有开启公钥登录的功能。这时需要打开远程主机的/etc/ssh/sshd_config,查看下面几行是否被注释掉了,若是,取消注释然后重启ssh服务即可(debian系推荐使用systemctl工具)

RSAAuthentication yesPubkeyAuthentication yesAuthorizedKeysFile .ssh/authorized_keys

存储公钥

远程主机通常将用户的公钥存储在.ssh目录下的authorized_keys文件中。可以使用一下命令进行公钥存储:

$ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub