SSH 开启自动登录

假设服务器网址为: server.joycodes.com,客户端就为本地电脑.默认情况下,我们通过客户端ssh到服务器端,是需要输入密码来进行认证的.除了使用用户名和密码,SSH还可以使用公钥/私钥来进行认证,这样就避免在同一客户端SSH多次输入麻烦.

SSH 使用公钥/密钥认证的原理如下:

服务器端持有公钥,客户端持有密钥,当客户端通过SSH到服务器端时将会发送私钥,服务器端根据私钥和自身持有的密钥进行验证.如果匹配,认证通过.具体设置如下:

 1.登录到服务器端,生成SSH公钥和密钥

 1joy:joys-macpro31:~$ssh root@server.joycodes.com #登录用户为root
 2root@server.joycodes.com's password:   #输入root的密码
 3[root@joycodes ~]#ssh-keygen -t rsa
 5Generating public/private rsa key pair.
 6Enter passphrase (empty for no passphrase):  #直接按回车
 7Enter same passphrase again:  #直接按回车
 8Your identification has been saved in /root/.ssh/id_rsa.
 9Your public key has been saved in /root/.ssh/id_rsa.pub.
10The key fingerprint is:
11c5:ec:ce:c5:67:eb:fb:a4:05:a0:fd:05:75:92:ec:1c joy@joys-macpro31.local

 

2.在服务器端将生成的公钥加入authorized_keys中

[root@joycodes ~]# cd ~/.ssh
[root@joycodes ~]# cat id_rsa.pub >> authorized_keys
[root@joycodes ~]# chmod 600 authorized_keys

 

3.退出服务器端,将私钥保存到客户端

1 [root@joycodes ~]# exit
2 joy:joys-macpro31:~$ mkdir -~/.ssh
3 joy:joys-macpro31:~$ cd ~/.ssh
4 joy:joys-macpro31:~/.ssh$ scp neo@server1.techpulp.com:.ssh/id_rsa ./
5 root@server.joycodes.com's password: #再次输入服务器密码 将私钥下载到 ~/.ssh目录中
6 .ssh/id_rsa                                          100% 2587     2.5KB/s   00:00
7 joy:joys-macpro31:~/.ssh$ chmod 600 id_rsa

 

 经过上面步骤后,在次运行 ssh root@server.joycodes.com后就可以直接登录到服务器而无需输入密码.

 附capistrano文件

 

this capistrano file is for enable ssh auto login
# run command 
=> cap ssh_auto_login
# by joycodes@gmail.com
set :user, "root" # the user name login for remote server
set :password, "passwd" # login passwd for
role :app, 
"www.joycodes.com" # remote host
desc 
"this task is for set ssh auto login"
task :ssh_auto_login,:role 
=> :app do
      cmd 
=<<-COMMAND
        cd 
~/.ssh
        ssh
-keygen -t rsa
        cat id_rsa.pub 
>> authorized_keys
        chmod 
600 authorized_keys
      COMMAND
      run cmd.split(
/\n\s*/).join(' && 'do |channel, stream ,data|
        logger.info data
        
if data =~ /Enter file in/
        channel.send_data 
"\n"
      elsif data 
=~ /Overwrite/
        channel.send_data 
"y\n"
      elsif data 
=~ /Enter same passphrase/
        channel.send_data 
"\n"
      elsif data 
=~ /Enter passphrase/
        channel.send_data 
"\n"
      end
      end
      
get "/#{user}/.ssh/id_rsa"'/Users/joy/.ssh/id_rsa' #/User/joy is current local user home path
    run_locally 
"chmod 600 ~/.ssh/id_rsa"
end

 参考原文:  http://techpulp.com/2009/04/how-to-enable-auto-login-for-ssh/

 

 

posted @ 2009-06-28 16:47  joycodes  阅读(1478)  评论(0)    收藏  举报