パスワードなしでログインするにはssh keygenを使用することをお勧めしますが、怖いのは、誰かが自分のコンピュータに何らかの方法でアクセスしたときに保存されたキーを使用してすべてのサーバーにログインできることです。
だから私はIDファイルにパスワードを設定し、スクリプトが非常に長くて難しい任意のパスワードを使用してプレーンテキストでsshログインを入力するようにしてプロセスを少し曖昧にするつもりです。
これまで、以下のようにssh-keygenを作成し、以下のように.pubの内容をサーバーにコピーしました。
❯ ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/username/.ssh/id_ed25519): testssh
Enter passphrase (empty for no passphrase): <-- This is NOT empty
Enter same passphrase again: <-- This is NOT empty
Your identification has been saved in testssh
Your public key has been saved in testssh.pub
The key fingerprint is:
SHA256:vWch2CbFW50FShjCZDJKW59x7iPdXc44FoYFxmr7XIM username@arch
❯ cat ~/testssh.pub | ssh [email protected] 'cat >> .ssh/authorized_keys'
[email protected]'s password:
次に、次のようにキーのパスワードを尋ねます。
❯ ssh -i testssh [email protected]
Enter passphrase for key 'testssh':
しかし、このようなことが可能かどうかを知りたいです。
❯ ssh -i testssh --passphrase="SomeIncredibleLongAndRandomizedPasswordThatIsMeantToBeUsedForScripts" [email protected]
問題は、IDファイルを使用してパスワードをパラメータとしてログインする方法です。
私の主張を明確に表現できたらいいのに
答え1
OpenSSHクライアントを使用していると仮定すると、次のコマンドを使用してこれを実行できます。SSHパス。
sshpass -P "Enter passphrase for key" \
-pSomeIncredibleLongAndRandomizedPasswordThatIsMeantToBeUsedForScripts \
ssh -i testssh [email protected]
もちろん、できるといって必ずしなければならないという意味ではありません。ご質問に対する回答をご検討ください。
答え2
SSH keygenを使用することをお勧めします。パスワードなしでログイン、
[...]
だから私はそのプロセスを少しぼかしたいです。パスワードを設定してください身分証明書に
これは少し矛盾して聞こえるので、何をしたいのかを言うのは難しいです。
インタラクティブにログインする場合は、キー/IDファイルを使用するときにパスワードを入力するだけです。
一方、ある人に鍵を与えなければならないという意味なら無人プロセスを進め、同じシステムにキーパスワードを保存したい場合は、パスワードがまったくない可能性があります。
ただし、これを防ぐには、キーに一般的な(良い)パスワード/パスワードを設定してから、次のものを使用できます。ssh-agent
無人スクリプトで使用できるように暗号化されていないキーを保存します。その後、再起動するたびにキーパスワードを1回入力するだけで、暗号化されていないキーがシステムメモリに残っている間、攻撃者はドライブを盗むことができません。代わりに、システムのソフトウェアセキュリティを損なうか、コールドブート攻撃を実行してメモリの内容を読み取る必要があります。
次に、force コマンドも使用します。authorized_keys
キーの使用を制限するためにリモコンにファイルを保管してください。
スクリプトでキーを使用できるようにするには、ssh-agent
エージェントを起動して再起動するたびにキーを追加します。
# start the agent, the output contains settings needed to talk to it
# and an 'echo' command printing its PID, remove that one here
ssh-agent | grep -ve ^echo > ~/script-agent-info
. ~/script-agent-info
# add the key to the agent, this asks for the passphrase
ssh-add ~/.ssh/script_id_rsa
その後、スクリプトで
# load the agent settings we stored earlier
. ~/script-agent-info
# use the key
ssh somehost@somewhere
ssh-agent -a
(エージェントが使用するソケットのランダムな名前を生成するのではなく、エージェントにパスを通知してからスクリプトでSSH_AUTH_SOCK
設定できます。)
答え3
bashやopen-sshだけではこれを達成する方法がないようです。
私はそれを使用して動作させることができました予想される
期待されるスクリプト:
spawn ssh -i testssh [email protected]
expect "Enter passphrase"
send "SomeIncredibleLongAndRandomizedPasswordThatIsMeantToBeUsedForScripts\r"
interact
1本のライン:
expect -c "spawn ssh -i testssh [email protected];expect \"Enter passphrase\";send \"SomeIncredibleLongAndRandomizedPasswordThatIsMeantToBeUsedForScripts\r\";interact"
Enter passphrase
パスワードを見つけて入力することが期待されますsend "SomeIncredibleLongAndRandomizedPasswordThatIsMeantToBeUsedForScripts\r"
。
最後に、インタラクティブinteract
な相互作用
プレーンテキストパスワードは通常使用しないでください。