Bash

組合兩個 SSH 命令

  • April 6, 2019

第一個 ssh 命令是在我的電腦上完成的,我輸入密鑰密碼,然後在登錄伺服器時輸入第二個 ssh 命令。

ssh -i cloudkey -L 6000:localhost:6001 admin@54.152.188.55 -p 9000
#i get prompted for a password to use the key 
ssh -D 6001 -p 6666 localhost -l dancloud
#i get prompted for a password associated with user dancloud
  1. 如何將這些命令組合成一個命令以獲得相同的結果?我看到 netcat 和 ProxyCommand 在這裡可能很有用,但無法弄清楚。
  2. 如何硬編碼兩個密碼並將其放入 bash 腳本中?希望我可以./login.sh使用硬編碼到腳本中的密碼來執行和執行所有這些程式碼,並達到相同的最終結果。

第一種可能性很明顯(注意-t開關):

ssh -t -i cloudkey -L 6000:localhost:6001 admin@54.152.188.55 -p 9000 \
  "ssh -D 6001 -p 6666 localhost -l dancloud"

ProxyCommand乍一看它更複雜,但從概念上講你只需要一個轉發(不再netcat建議使用版本,使用-Wswitch 更優雅):

Host proxy
 Hostname 54.152.188.55
 User admin
 IdentityFile cloudkey
Host target
 Hostname localhost
 Port 6666
 User dancloud
 DynamicForward 6000
 ProxyCommand ssh -W %h:%p proxy

然後僅使用連接ssh target(請參閱…現在您甚至不需要 bash 腳本:))。

*說明:*第二個ssh也在您的電腦上執行,因此動態轉發套接字(SOCKS 代理)直接在您的電腦上創建)。

關於密碼,這不是可取的(密碼應該是secret),但它可能sshpass適當的ssh.


手冊頁將開關ssh解釋為:-W

-W host:port

請求將客戶端上的標準輸入和輸出通過安全通道轉發到埠上的主機。暗示-N,和. -T_ 僅適用於協議版本 2。ExitOnForwardFailure``ClearAllForwardings

結合ProxyCommand,它連接到請求hostname,然後為您提供基本的嵌入式版本netcat( 將標準 IO 連接到host:port對(參數)。

引用自:https://unix.stackexchange.com/questions/281111