實現安全的免密碼ssh登錄

實現安全的免密碼ssh登錄

1、用ssh-keygen生成一對公私鑰,命令如下
ssh-keygen -t rsa
回車會讓你輸入存放公私鑰的路徑和名稱,默認存放在~/.ssh/目錄下
接下來輸入一個口令,用來保護這個私鑰,如果此處你輸入了口令,則在連接你上傳公鑰的機器時會問你要這個密碼的,如果口令爲空,就可以直接連接上,沒有口令很不安全的,一旦有人複製了你的passphrase,那麼他就可以不用密碼登錄上了。

2、把生成的公鑰上傳到你想連接服務器上,並且將其內容追加到一個叫~/.ssh/authorized_keys的文件裏,命令如下
cat 公鑰文件 | ssh 用戶@192.168.1.9 "cat - >> ~/.ssh/authorized_keys"
(注意,如果不存在~/.ssh文件夾,請手工創建)

如果在第一步中沒有輸入口令,至此就可以實現無需輸入密碼即可登陸ssh服務器拉,反之,你用ssh 用戶@服務器地址,則會提示你輸入私鑰的口令,輸入正確的口令,即可登陸,你也可以直接回車,這時會提示你輸入服務器的密碼。

到現在你還沒有實現真正的無密碼登陸,不過可以使用ssh-agent來自動提供私鑰,命令如下
eval `ssh-agent`
ssh-add
這裏會提示輸入一次passphrase,這裏輸入了正確的口令後,再在本session中來用ssh就不需要在輸入口令,但是重新打開一個終端,在那裏面使用ssh還是需要輸入口令,如果想複用已經存在的ssh-agent,可以用一個簡單的perl腳本來實現,腳本內容如下:

#!/usr/bin/env perl
# author: jianingy
# 2007/06/24

use strict;
my $exist;
my @dirs = grep {-r $_} glob "/tmp/ssh-*";
foreach (@dirs) {
    my @socks = glob("{$_}/agent.*");
    next unless (@socks);
    foreach (@socks) {
        $exist = $_;
        # check agent
        unless (system "SSH_AUTH_SOCK=$_ ssh-add -l >/dev/null 2>&1") {
            print "export SSH_AUTH_SOCK=$_/n";
            exit 0;
        }
    }
}

if ($exist) {
    system "SSH_AUTH_SOCK=$exist ssh-add";
    print "export SSH_AUTH_SOCK=$exist/n";
} else {
    system "ssh-agent";
    exec $0;
}

用toucth創建一個文件,名爲ssh-attach(名字隨便叫),把上面的內容加進去,修改該文件的權限,chmod 755 ssh-attact,把它放到/usr/bin小,然後在.bashrc中加上下面一行,
eval `ssh-attac`

至此,就是實現了免密碼ssh登陸了(當然至少還是需要輸入一次口令的(passphrase))

(注:本文參照 http://www.jianingy.com/ssh-pass.html)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章