利用 ssh 的用戶配置文件 config 管理 ssh 會話


轉載來自:http://dhq.me/use-ssh-config-manage-ssh-session

通常利用 ssh 連接遠程服務器,一般都要輸入以下類似命令:

1
ssh user@ hostname -p port

如果擁有多個 ssh 賬號,特別是像我這種喜歡在終端里直接 ssh 登陸,不用 PuTTYSecureCRT之類的 ssh 客戶端的,要記住每個ssh 賬號的參數,那是多么蛋疼的事情。

還好,ssh 提供一種優雅且靈活的方式來解決這個問題,就是利用 ssh 的用戶配置文件 config 管理 ssh 會話。ssh 的用戶配置文件是放在當前用戶根目錄下的 .ssh 文件夾里(~/.ssh/config,不存在則新創建一個),其配置寫法如下:

1
2
3
4
5
Host    別名
     HostName        主機名
     Port            端口
     User            用戶名
     IdentityFile    密鑰文件的路徑

有了這些配置,就可以這樣用 ssh 登陸服務器了:

1
ssh 別名

這里以免費的 ssh shell -- CJB 為例,介紹指定密鑰文件配置連接 ssh 的用法,如果沒有可以在這里注冊一個賬號。

這里假設你有一個名為 user 的 CJB ssh 賬號,那么用戶名就是 "user",端口使用 ssh 默認的端口 "22",CJB 默認使用的主機名是 "shell.cjb.net",不過在鎮里這個域名已經被 DNS 污染用不了,只能用 IP 地址 216.194.70.6 代替。

PS:上面的 CJB 主機名 IP 可以通過 dig 獲得

1
dig shell.cjb.net

使用密鑰的好處就是省去每次 ssh 登陸服務器時都要輸入登陸密碼的操作,這里使用 ssh-keygen 生成 ssh 密鑰(以下操作是在 ~/.ssh/ 目錄里執行):

1
ssh -keygen -t rsa

這里使用 rsa 的加密方式(另外一種加密方式是 dsa),中間會詢問密鑰生成的位置,這里只輸入 cjb,在當前位置生成名為 cjb 的密鑰,接着會詢問是否要設置一個密碼(passphrase),這里留空,直接按回車就行(本來就不想登陸輸入密碼了...),最后,會在當前目錄路徑下生成一個名為 cjb 的私鑰,一個名為cjb.pub 的公鑰。

把公鑰 cjb.pub 上傳到遠程 cjb 服務器的 ~/.ssh/ 目錄下:

1
scp . /cjb .pub user@216.194.70.6:~/. ssh /

上傳完后,把公鑰 cjb.pub 的內容復制到 authorized_keys 文件里(不存在則新創建一個):

1
cat cjb.pub >> authorized_keys

以 ssh publickey 的形式訪問,對當前用戶根目錄下的 .ssh 文件夾里的目錄文件是要有一定的權限要求,之前遇到過 ssh publickey 配置好了,不過用 publickey 登陸驗證時則無效。所以,最好設下 .ssh 目錄權限為 700,authorized_keys 權限為 600:

1
2
chmod 700 ~/. ssh /
chmod 600 authorized_keys

當然,用密鑰的方式連接服務器是需要服務器上的 ssh 支持的,需要 ssh 的配置文件(默認是在 etc/ssh/sshd_config)里的 PubkeyAuthentication 設置成 yes。如果要改登陸的端口,直接把 Port 改成你想要的端口值就行。修改完后重啟下 ssh ,配置就生效:

1
/etc/init .d /ssh restart

還好,CJB 提供的免費 ssh 支持密鑰訪問。

這樣,連接 cjb 的密鑰配置完成,本地 ssh 用戶配置文件 config 里的 IdentityFile 值寫為私鑰 cjb 的文件路徑 "~/.ssh/cjb" 就行,最后,本地 ssh 用戶配置文件 config 的內容如下:

1
2
3
4
5
Host        cjb
     HostName        216.194.70.6
     Port            22
     User            user
     IdentityFile    ~/.ssh/cjb

配置完成后,就可以在終端直接輸入 "ssh cjb" 暢通無阻地連上遠程的 cjb 服務器上了。

如果有多個 ssh 賬號需要配置,在 config 文件里隔行分開寫就行,例如:

1
2
3
4
5
6
7
8
9
10
Host        cjb
     HostName        216.194.70.6
     Port            22
     User            user
     IdentityFile    ~/.ssh/cjb
 
Host        alias
     HostName    hostname
     Port        port
     User        user

嘿嘿,如果你也用 ssh 作 socks5 代理翻牆,以后不用這樣寫了:

1
ssh -qTfnNC -D 12345 user@216.194.70.6 -p 22

可以省去 user 后面的,直接寫成這樣:

1
ssh cjb -qTfnNC -D 12345

上面的 scp 傳送也可以簡寫成這樣:

1
scp . /cjb .pub cjb:~/. ssh /

執行遠程 ssh 命令:

1
ssh cjb  "ls ~"

打包一個文件(假設當前目錄有個名為 test 的文件夾),接着上傳到遠程服務器,最后解壓文件

1
tar -zcvf - . /test/ ssh user@216.194.70.6  'cd /user/; tar xvfz -'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM