スクリプトを使用して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
指定したホスト名を解決できず、エラーが発生しました。その後、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