Bash
組合兩個 SSH 命令
第一個 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
- 如何將這些命令組合成一個命令以獲得相同的結果?我看到 netcat 和 ProxyCommand 在這裡可能很有用,但無法弄清楚。
- 如何硬編碼兩個密碼並將其放入 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
建議使用版本,使用-W
switch 更優雅):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
對(參數)。