7

この質問は何度か聞かれましたが、検索のどこにも関連する答えが見つかりませんでした。

私はセキュリティが問題ではない開発環境で働いており、数秒間考えれば誰でもパスワードを推測することができます。

私がやろうとしていることは単純です。ローカルの.bashrcファイルにエイリアス関数を作成しました。この関数でデフォルトのパスワードを使用してマシンに自動的にログインしたいと思います。

私の現在の実装は次のようになります。

function s () { 
 ssh root@192.168.1.$1
}

実行すると、次のようになります。

~]s 122

ssh root@192.168.1.122

root@192.168.1.122's password: 

Bashを使用し、RSAキーを使用しない場合、これにデフォルトのパスワード「password」を使用させたいと思います。

IPとユーザーがすでに設定されているところで、次のことを試しました。

Do=$(expect -c "
spawn ssh $User@${IP[0]}.${IP[1]}.${IP[2]}.${IP[3]} 
expect \"yes/no\" 
send \"yes\r\" 
expect \"assword\" send \"password\"")
echo $Do
$Do

次のエラーが発生します。

Connecting and logging into server using expect
usage: send [args] string
    while executing
"send"
    invoked from within
"expect "assword" send "password""
 Administrator@192.168.1.176's password:
bash: spawn: command not found...

次のコマンドを使用して、マシンを接続できます。インタラクションを削除すると、uptimeコマンドが実行され、接続が閉じられます。対話コマンドを使用すると、入力している内容を確認したり、実際にマシンと対話したりすることができません。何か案は?

Do=$(expect -c "spawn ssh $User@${IP[0]}.${IP[1]}.${IP[2]}.${IP[3]}; set timeout 4; expect \"assword\"; send \"password\n\"; expect \"test\"; send \"uptime\n\"; interact;");echo $Do;
4

2 に答える 2

8

expectツールでこれを行うことができます: http://expect.sourceforge.net/

広く利用できるため、システムによっては、同等sudo apt-get install expectまたはyum install expectインストールされます。

expectsshを使用したスクリプトの例を次に示します。これによりログインし、インタラクティブ プロンプトを制御できるようになります。

#!/usr/bin/expect

set login "root"
set addr "127.0.0.1"
set pw "password"

spawn ssh $login@$addr
expect "$login@$addr\'s password:"
send "$pw\r"
expect "#"
send "cd /developer\r"
interact

expect以下は、bash スクリプトの一部として使用する方法の例です。これは、ssh でログインし、cd で /var に移動し、スクリプトを実行してから、ssh セッションを終了します。

#!/bin/bash
...

login_via_ssh_and_do_stuff() {

    # build the expect script in bash

    expect_sh=$(expect -c "
    spawn ssh root@127.0.0.1
    expect \"password:\"
    send \"password\r\"
    expect \"#\"
    send \"cd /var\r\"
    expect \"#\"
    send \"chmod +x my_script.sh\r\"
    expect \"#\"
    send \"./my_script.sh\r\"
    expect \"#\"
    send \"exit\r\"
    ")

    # run the expect script
    echo "$expect_sh"
}

これらのスニペットをローカル システムのスクリプトに残して、スクリプトのエイリアスにすることができます。

また、セキュリティは問題ではないと言っていましたが、パスワードを使用せずに ssh を行う「適切な」方法は、ssh キーペアを使用することです =)

于 2012-11-08T21:56:47.500 に答える
6

sshpass主要な Linux-es のパッケージ リポジトリで利用できるものを使用します。

たとえば、パスワードがpassword.txtファイルにある場合:

sshpass -fpassword.txt ssh username@hostname

sshpassssh専用の で実行さttyれ、インタラクティブなユーザーからパスワードを取得していると思い込ませます。

于 2013-12-23T17:36:36.893 に答える