通常情况下,每次使用ssh登录或使用scp复制远程系统的文件时,都需要提供密码,然后才能做进一步的处理。为了省略输入密码这一步骤,有时可以采用Shell脚本的方法解决,但这需要把手工输入的密码以明码形式放在脚本文件中。
利用密钥配置文件,OpenSSH可以是ssh远程登录与scp文件复制的操作过程中省略密码验证的中间环节。为此,ssh客户端首先应建立OpenSSH连接,然后自动地想服务器发送其公钥。之后,服务器即可根据相应用户主目录中预定义的密钥列表,对收到的密钥进行比较。如果存在匹配的密钥,服务器将会允许ssh或sco自动登录。
密钥文件需要单独生成,生成后的密钥文件存储在服务器用户主目录的~/.ssh子目录中。其中,id_rsa和id_rsa.pub文件分别是私玥和公钥,而authorized_keys文件则用于存储所有授权的远程客户系统的公钥,使得远程客户系统能够以此用户的身份登录到本地系统而无需提供密码。
为了实现ssh和scp的无密码登录,需要事先生成并安装远程登录与数据传输的密钥,其唯一的限制是需要把密钥绑定到两个系统的IP地址上。然后,服务器即可使用预安装的密钥,对每一次的远程登录和文件传输进行验证。但是,这以功能不适合于利用DCHP协议动态分配IP地址,致使IP地址经常发送变化的情况。
由于只需知道用户名即可实现远程注册和文件传输,而无需提供密码,这一功能是有安全风险的。因此,在具体实现时,在服务器与客户端之间最好采用普通用户账号,以免造成较大的破坏。
下面以webgod用户为例,详细说明在实现ssh和scp的无密码登录之前,OpenSSH的客户端与服务器双方事先都需要做哪些准备工作。
1 客户端配置
在客户端与服务器系统中分别创建一个同名为webgod用户,然后以webgod用户的身份登录到客户端系统,使用ssh-keygen命令生成一对密钥。当系统提示输入一个与密钥相关联的密码时,直接按下Enter键。
生成的两个密钥文件均存储在webgod用户主目录的.ssh子目录中。其中,id_rsa文件中存储的是私玥,id_rsa.pub文件中存储的是公钥(用于提交远程服务器,解密客户端传输的加密数据)。
采用如下命令,把生成的公钥文件id_rsa.pub复制到远程系统的webgod用户主目录中。
$ scp ~/.ssh/id_rsa.pub [email protected]:pub_key
2 服务器配置
在OpenSSH服务器中,以webgod用户登录,然后使用cat命令和”>>”重定向符号,把pub_key文件中的数据追加到authorized_keys文件的末尾。
$ cat ~/pub_key >>~/.ssh/authorized_keys
authorized_keys文件包含所有OpenSSH客户端系统的公钥列表,如果表中列举的客户系统中的webgod用户仍以同一身份连接到服务器,则无需提供密码。
3 示例
在完成上述全部设置之后,当OpenSSH客户端的webgod用户以webgod身份,使用ssh、scp或sftp连接到远程主机,就不会再提示用户输入密码了。
但这一方法对客户端的其他用户无效,即使他们也以webgod用户的身份登陆到远程服务器,仍需提供密码。
SSH学习之三 SSH与SCP无密码登录