ssh登入兩次的腳本

ssh登入兩次的腳本

我需要使用腳本登入ssh兩次,但無法使其工作。這是我的腳本文件中的內容:

#!/usr/bin/expect

set login "user"
set addr "address1"
set addr2 "address2"
set pw "password"

spawn ssh $login@$addr
expect "$login@$addr\'s password:"
send "$pw\r"
expect "$login@host:"
spawn ssh $addr2
expect "$login@$addr\'s password:"
send "$pw\r"
interact

但這失敗並出現錯誤:

user@host:~$ ssh: Could not resolve hostname address2: Name or service not known
send: spawn id exp7 not open
    while executing
"send "$pw\r""

如果我更改行spawn ssh $addr2exec ssh $addr2它會失敗並出現錯誤:

user@host:~$ ssh: Could not resolve hostname address2: Name or service not known
    while executing
"exec ssh $addr2"

為了讓這項工作正常進行,我需要改變什麼?

答案1

自從我找到解決這個問題的方法以來,發布了我自己的答案。這是實際有效的腳本:

#!/usr/bin/expect

set login "user"
set addr "address1"
set addr2 "address2"
set pw "password"

spawn ssh $login@$addr
expect "$login@$addr\'s password:"
send "$pw\r"
expect "$login@host:"
send "ssh $addr2\r"
expect "$login@$addr\'s password:"
send "$pw\r"
interact

spawn ssh $addr2所以基本上我用替換了該行send "ssh $addr2\r"。我試圖從我開始的地方產生另一個 ssh,而不是在我第一次 ssh 到的主機上啟動另一個 ssh。

答案2

ssh無法解析您提供的主機名,因此會出錯。然後,您告訴 Expect 發送密碼,但由於 ssh 拋出錯誤並退出,因此沒有任何可發送的內容。因此,您需要檢查您提供的主機名,因為它無法解析。或者您可以切換到 IP 位址。但最好找出為什麼它無法找出“address2”是誰。

答案3

尋找 ssl 金鑰產生。您產生一對金鑰(公鑰和私鑰),將產生的私鑰保留在系統上,並將公鑰放在需要透過 ssh 存取的系統上。然後 ssh 不會提示你輸入密碼,你也不需要期待。

這是一個腳本“sskkeygen.sh”,我用它來產生金鑰,這樣我就可以為不同的系統產生不同的金鑰對,

#!/bin/bash
SYSTEM=${1:-boogie}
COMMENT=${2:-"Key for $SYSTEM work"}
ssh-keygen -t dsa -f ~/.ssh/id_dsa.$SYSTEM -C "$COMMENT"
chmod 600 ~/.ssh/id_dsa.$SYSTEM
chmod 600 ~/.ssh/id_dsa.$SYSTEM.pub

將 ~/.ssh/id_dsa.$SYSTEM.pub 金鑰複製到遠端系統。 請小心 - 說明都說複製密鑰文件,但您想要附加它!

然後你需要一個檔案 ~/.ssh/config 來告訴哪些主機使用哪些金鑰。

#key: prod
Host 1.2.3.4
  IdentityFile ~/.ssh/id_dsa.prod
  User meself

#key: dev/test
Host 2.3.1.4
  IdentityFile ~/.ssh/id_dsa.dev
  User meself

#key: ftp dropbox
Host dropbox.company.com
  IdentityFile ~/.ssh/id_dsa.dropbox
  User virtualuser

#key: ftp thing
Host aaa.bbb.thing.com
  IdentityFile ~/.ssh/id_dsa.think
  User neato

#key: work
Host *.work.com
  IdentityFile ~/.ssh/id_dsa.work
  User workid

相關內容