linux ssh服务不使用密码的方法
SSH为Secure Shell的缩写,由IETF的网络工作小组(Network Working Group)所制定;SSH为创建在应用层和传输层基础上的安全协议。(维基百科http://zh.wikipedia.org/zh-cn/SSH)
SSH默认登录时要输入密码,但有时写程序希望通过SSH服务在远程机器上执行命令,希望可以跳过输入密码的方法,那么应该怎么办呢?
首先看一下SSH的认证方式。(维基百科http://zh.wikipedia.org/zh-cn/SSH)
SSH的安全验证
在客户端来看,SSH提供两种级别的安全验证。
- 第一种级别(基于密码的安全验证),知道帐号和密码,就可以登录到远程主机,并且所有传输的数据都会被加密。但是,可能会有别的服务器在冒充真正的服务器,无法避免被“中间人”攻击。
- 第二种级别(基于密匙的安全验证),需要依靠密匙,也就是你必须为自己创建一对密匙,并把公有密匙放在需要访问的服务器上。客户端软件会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在你在该服务器的用户根目录下寻找你的公有密匙,然后把它和你发送过来的公有密匙进行比较。如果两个密匙一致,服务器就用公有密匙加密“质询”(challenge)并把它发送给客户端软件。从而避免被“中间人”攻击。
在服务器端,SSH也提供安全验证。 在第一种方案中,主机将自己的公用密钥分发给相关的客户端,客户端在访问主机时则使用该主机的公开密钥来加密数据,主机则使用自己的私有密钥来解密数据,从而实现主机密钥认证,确定客户端的可靠身份。 在第二种方案中,存在一个密钥认证中心,所有提供服务的主机都将自己的公开密钥提交给认证中心,而任何作为客户端的主机则只要保存一份认证中心的公开密钥就可以了。在这种模式下,客户端必须访问认证中心然后才能访问服务器主机。
从客户端第二种级别的验证方式,我们发现我们可以实现不输密码的登录,但要求将本地的公钥放在服务器上。下面是具体的方法。
首先机器上要安装ssh服务 ubuntu 上只要输入 $ sudo apt-get install ssh openssl 生成密钥 $ ssh-keygen -t rsa 连续打三个回车 Generating public/private rsa key pair. Enter file in which to save the key (/home/abc/.ssh/id_rsa): Created directory '/home/abc/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/abc/.ssh/id_rsa. Your public key has been saved in /home/abc/.ssh/id_rsa.pub. The key fingerprint is: ……以下省略…… 产生密钥后,将公钥追加到目标服务器登录用户的authorized_keys里。 用追加的方法可以让多台机器访问服务器不用密码。以下以root用户为例,其他用户一样。 先拷贝一下。 $ scp /home/abc/.ssh/id_rsa.pub root@192.168.100.224:/root/.ssh/abc_authorized_keys 然后登录远程机器,将刚才的文件追加到/root/.ssh/authorized_keys后,没有则创建。 $ ssh root@192.168.100.224 # cd /root/.ssh # cat abc_authorized_keys >> authorized_keys (注意是双>>,另外文件名不要写错了) 退出后再登录就不需要密码了。
另外补充一下开机自动启动ssh服务的方法。
网上查到的方法挺多的,我采用的是这种,并且有效。 修改/etc/rc.loacl文件,在 exit 0 前增加一句 /etc/init.d/sshd start 另外的方法是 service sshd start 或 # chkconfig sshd on # reboot