若是公司的服務器在外網,通常會設置一個跳板機,訪問公司其餘服務器都須要從跳板機作一個ssh跳轉,外網的服務器基本都要經過證書登陸的。因而咱們面臨一個狀況,本機ssh->跳板機->目標機器。若是直接在跳板機上放置公私鑰對,並將跳板機上的公鑰放到目標機器上,這樣能夠直接登陸。但這樣會有一個問題,跳板機上的root權限的用戶能夠獲取普通用戶的公私鑰對,就算對私鑰設置了密碼,可是從安全角度來看,這樣仍是失去了保障,失去了服務器的一部分安全性。html
如何來解決這個問題呢,其實ssh協議自己是支持祕鑰轉發的,不須要在跳板機上放置公私鑰。linux
從linux客戶端的ssh跳轉時,執行命令nginx
ssh username@跳板機ip
windows
而後在跳板機上跳轉到目標機器安全
ssh username@目標機器ip
服務器
跳板機ip和目標機器ip,username帳戶下已經在相應的 .ssh/authorized_keys
加入了公鑰,配置是沒有問題了,可是咱們會遇到一個Pubkey Unauthorization的錯誤,因跳板機沒有username的私鑰。問題老是會有,解決方法也老是有,ssh是有轉發密鑰的功能,從本機跳轉到跳板機時能夠把私鑰轉發過去。ssh
正確作法是,在本機linux客戶端執行命令 ssh -A username@跳板機ip
code
-A表示轉發密鑰,因此跳轉到跳板機,密鑰也轉發了過來htm
接下來咱們再在跳板機執行命令 ssh username@目標機器ip
blog
另外能夠配置本機客戶端的默認配置文件,修改成默認轉發密鑰:
修改ssh_config(不是sshd_config,通常在/etc或者/etc/ssh下):
把 #ForwardAgent no
改成 ForwardAgent Yes
ssh username@目標機器ip -p 22 -o ProxyCommand='ssh -p 22 username@跳板機ip -W %h:%p'
也能夠修改配置文件 ~/.ssh/config
, 若沒有則建立:
Host tiaoban #任意名字,隨便使用 HostName 192.168.1.1 #這個是跳板機的IP,支持域名 Port 22 #跳板機端口 User username_tiaoban #跳板機用戶 Host nginx #一樣,任意名字,隨便起 HostName 192.168.1.2 #真正登錄的服務器,不支持域名必須IP地址 Port 22 #服務器的端口 User username #服務器的用戶 ProxyCommand ssh username_tiaoban@tiaoban -W %h:%p Host 10.10.0.* #能夠用*通配符 Port 22 #服務器的端口 User username #服務器的用戶 ProxyCommand ssh username_tiaoban@tiaoban -W %h:%p
配置好後, 直接 ssh nginx
就能夠登陸 192.168.1.2
這臺跳板機後面的服務器。 也能夠用 ssh username@10.10.0.xx
來登陸10.10.0.27, 10.10.10.33, ....
等機器。
windows下SecureCRT配置轉發,須要作如下設置
資料:
[1] http://www.cnblogs.com/ggjucheng/archive/2012/08/19/2646427.html