スクリプトに記載されているパスワードを使用してsshサーバーに自動ログインできるシェルスクリプトを作成してみました。私は次のコードを書きました:
set timeout 30
/usr/bin/ssh -p 8484 [email protected]
expect
{
"[email protected]'s password"
{
send "password\r"
}
}
このコードは正しく実行されていませんが、パスワードを要求しています。誰かがこれを解決するのを助けてくれますか
私はかつてsshサーバーにログインするためにexpect
スクリプトを書いて(あなたのケースのように)、私のスクリプトは次のようなものでした:
#!/usr/bin/expect
spawn ssh [email protected]
expect "password"
send "MyPassword\r"
interact
多分interact
があなたのスクリプトに欠けていると思います。
あなたはそれを間違った方向に進んでいます。やりたいことは、パスワードなしのssh-keyペアを生成し、(サーバーがRSAキー認証をサポートしている限り)すべてのユーザーに対してパスワードを入力しなくてもアクセスできるようにすることです。これは、秘密鍵が盗まれる可能性のある場所に保管されている場合のセキュリティ上のリスクです。
次の手順を実行します:
mkdir -p ~/.ssh
cd ~/.ssh
ssh-keygen -type dsa -i mysshkeys
これで、~/.ssh
ディレクトリにmysshkey.pub
とmysshkey
の2つのファイルができます。 mysshkey.pub
は公開鍵です。これはリモートサーバーに配置しても安全です。 mysshkey
はパスワードなしの秘密鍵です。リモートサーバー(または他の誰かがコピーを取得できる場所)に置くのは安全ではありません。
SSHで接続したいサーバーで:
mkdir -p ~/.ssh
mysshkey.pub
の内容をコピーして~/.ssh/authorized_keys
に貼り付けます~/.ssh/authorized_keys
がchmod
に600
であることを確認してください次に、ローカルマシンで実行するには、次のコマンドを実行します。
ssh -i ~/.ssh/mysshkey <remote_server_ip>
そして、パスワードの入力を求められることなくログインします。
これは、パスワードを変更した場合に更新が必要な複数の場所にパスワードをハードコーディングする必要がないため、自動ログインを管理するのに非常に好ましい方法です。
Debianベースのディストリビューションでは、sshpass
パッケージを使用すると、目的の操作を簡単に実行できます。パッケージは他の多くの人気のあるディストリビューションで利用可能です。最初に設定する必要があります:
echo 'YourPassword' > passwordFile.txt
chmod 600 passwordFile.txt
次に、次のようなスクリプトからSSHコマンドを呼び出します。
sshpass -f /path/to/passwordFile.txt /usr/bin/ssh -p 8484 [email protected]
これにより、expect
を使用するソリューションよりも、異なるロケールを使用している場合やパスワードを変更する必要がある場合などの柔軟性が向上します。
最初にsshPassをインストールしますSudo apt-get install sshpass
次に、.bashrcファイルに次のようにエイリアスを作成します。
alias sshLogin='sshpass -p <your ssh password> ssh username@remote_Host'
変更した.bashrcファイルをsource ~/.bashrc
でリロードします
これで完了です。
これで、ターミナルで上記で作成したエイリアスsshLogin
を使用してsshを実行できます。
あなたはこれを使うことができます:
sshpass -p 'yourpassword' ssh user@ip
ハッシュキーを作成してPCに保存するために必要なものすべて
入力するだけ
ssh-keygen -t rsa -b 4096 # just press Enter till the end
次に入る
ssh-copy-id <user>@<server>
次に通常使用してログインします
ssh <user>@<server>
今、あなたはパスワードを必要としません
注:パスワードをプレーンテキストで保存すると危険です
この方法は、非常に安全な長さ4096の公開鍵でRSAを使用してパスワードのハッシュ値を作成します。
5つの簡単なステップでSSH Keygenを使用したSSHパスワードなしログイン :
ステップ1:認証SSH-Kegen Keys on –(192.168.0.12)
最初にユーザーでサーバー192.168.0.12にログインし、次のコマンドを使用して公開鍵のペアを生成します。
ステップ2:– 192.168.0.11に.sshディレクトリを作成します
次のコマンドを使用して、サーバー192.168.0.12からSSHを使用してサーバー192.168.0.11に接続し、その下に.sshディレクトリを作成します。
ステップ3:生成された公開鍵を– 192.168.0.11にアップロードします
サーバー192.168.0.12からのSSHを使用し、サーバー192.168.0.11のユーザーの.ssh
ディレクトリの下に新しい生成された公開鍵(id_rsa.pub)をファイル名authorized_keysとしてアップロードします。
ステップ4:権限を192.168.0.11に設定します
サーバーのSSHバージョンが異なるため、.ssh
ディレクトリとauthorized_keys
ファイルに権限を設定する必要があります。
ステップ5:192.168.0.12から192.168.0.11サーバーへのパスワードなしのログイン
これ以降、パスワードのないtecmintユーザーとしてサーバー192.168.0.12からsheenaユーザーとして192.168.0.11にログインできます。
他の回答で既に説明したように、私はsshpass
も使用していますが、これをread
コマンドと組み合わせて、一時的な環境変数にパスワードを保存します。このように私のパスワードはどこにも平文で書かれることはありません。ここに私が使用する1行のコマンドがあります:
read -s PASS; sshpass -p $PASS ssh <user>@<Host adress>
その後、パスワードを入力する必要があり(画面には何も表示されません)、Enterキーを押すと接続が開きます。
最初の引数はホスト名で、2番目はパスワードです。
#!/usr/bin/expect
set pass [lindex $argv 1]
set Host [lindex $argv 0]
spawn ssh -t root@$Host echo Hello
expect "*assword: "
send "$pass\n";
interact
実行:./script.expect
私は最近これを行いました、これはあなたを助けるかもしれません:
sshpass -p 'password' username@ipaddress
これが機能しない場合は、接続する他のマシンでキーを生成する必要があります
ssh-keygen
秘密鍵と公開鍵を生成して場所を尋ねます。空のままにすると、デフォルトで.sshフォルダーに鍵が保存されます。パスフレーズを要求されます。空のままにして、.sshフォルダーに移動して、 「authorized_keys」への公開鍵名
cd .ssh/
mv id_rsa.pub authorized_keys
useradd -d /home/username username
これにより、リストにユーザーが追加され、ホームディレクトリに移動して権限が付与され、sshdサービスが再起動されます
chmod 700 /home/username/.ssh
chmod 644 /home/username/.ssh/authorized_keys
chown root:root /home/dozee
Sudo service sshd restart
ここで、sshコマンドを実行する場所から、その場所にあるシステムに秘密鍵を移動する必要があります。次に、
sshpass -p 'password' ssh -i id_rsa username@ip
それでも機能しない場合は、/ etc/sshに移動し、vimエディターでsshd_configを開いて、pubkeyAuthenticatoinがyesになっているかどうかを確認します。yesに変更していない場合は、sshdサービスを再起動して試してみてください。正しく機能します。 。