SSHに2回ログインするスクリプト

SSHに2回ログインするスクリプト

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

関連情報