37

-iオプションを使用してSSH経由でサーバーに接続し、秘密鍵を指定できます。

ssh -i ~/.ssh/id_dsa user@hostname

データベースからテキストを取得するスクリプトを作成していid_dsaますが、その文字列をSSHに渡す方法がわかりません。私は次のようなものが必要になります:

ssh --option $STRING user@hostname

ここで$STRING、の値が含まれますid_dsa。あるかどうかを知る必要があり--optionます。

4

3 に答える 3

40

次のことを試してください。

echo $KEY | ssh -i /dev/stdin username@host command

キーはPSステートメントからは表示されませんが、stdinがリダイレクトされるため、単一のコマンドまたはトンネルにのみ役立ちます。

于 2013-04-19T10:42:38.030 に答える
15

機密情報が漏洩する可能性があるため、このようなスイッチはありません。もしあれば、簡単なコマンドを実行するだけで誰でもあなたの秘密鍵を入手できます。ps

編集:(コメントに詳細が追加されたため)

キーを一時ファイルに保存する必要があります。mktemp一時ファイルを作成するなどのコマンドを使用しない場合は、ファイルに書き込む前に、アクセス許可を正しく設定してください。

ブローカー(またはOpenSSHの場合はエージェント)プロセスを実行し、を使用してキーをロードすることを確認してください<whatever command you use to fetch it form the database> | ssh-add -

于 2012-08-20T17:47:06.337 に答える
2

暗号キーを文字列として渡すことはお勧めできませんが、質問のために、スクリプトでキーを文字列として渡す必要があるのと同じ状況に遭遇したと思います。ファイルに保存されているキーを使用することもできますが、スクリプトの性質上、スクリプトを非常に柔軟にする必要があり、それ自体にすべてを含める必要がありました。だから私は変数を割り当ててそれを渡し、次のようにエコーしていました:

#!/bin/bash
KEY="${ YOUR SSH KEY HERE INSIDE }"
echo "${KEY}" | ssh -q -i /dev/stdin username@IP 'hostnamectl'
exit 0

注: -qすべての警告を抑制します

stdinちなみに、上記のスクリプトのキャッチは、echoを使用しているため、sshキーを出力しますが、これもお勧めしません。grepを使用して、確実に出力されないものの、まだ出力されるものをgrepできることを非表示にします。エコーからの値。したがって、最終的なcmdは次のように変更できます。

#!/bin/bash
KEY="${ YOUR SSH KEY HERE INSIDE }"
echo "${KEY}" | grep -qw "less" | ssh -q -i /dev/stdin username@IP 'hostnamectl'
exit 0

これは私のために働いた。

于 2019-05-21T00:06:43.757 に答える