スクリプトを使用して 2 回ログインする必要があります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 $addr2
、exec 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
指定したホスト名を解決できないため、エラーが発生します。パスワードを送信するように指示していますが、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