パスワードを.ssh / configに追加する


24

私はubuntu 12.04を使用しています。毎日多くのサーバーに接続するためにsshを使用しているので、それらのパラメーターを.ssh / configファイルに入れます。このような :

Host server1
User tux
Port 2202
HostName xxx.x.xx.x

接続ごとに、このファイルにパスワードを入れる方法はありますか?そのため、サーバーがパスワードを要求すると、端末はパスを入力してサーバーに送信するため、毎回パスワードを入力する必要はありません。また、公開キーと秘密キーのペアを使用したくありません。


10
これがキーペアの目的です。
マイケルハンプトン

回答:


31

いいえ、openssh組み込みメカニズムを使用したssh認証のために、非対話形式でコマンドラインでパスワードを指定または提供する方法はありません。少なくとも私が知っていることではありません。パスワードを期待するスクリプトにハードコードすることもできますが、それは良い解決策でもありません。

Michaelが述べたように、パスワードなしの認証には必ずキーペアを使用する必要があります。最終的には、秘密鍵はファイル内のかなり大きなパスワードです。


問題は、そのクライアントサーバーが、キーを使用したログインを許可していないことです。usbストレージデバイスから取得した資格情報が保存されているすべてのサーバーへのログインを想定して、bashスクリプトを作成しています。ありがとう
アジョオーガスティン

1
かなり安全ではありません。そのスクリプトで提案する唯一のことは、そのファイルを厳しいファイル許可でロックすることです。
ダニラ・ラドナー

1
キーを許可しない場合、sshの仕組みを誤解します-パスワードログインを許可すると、辞書攻撃などが可能になります(非常に遅い攻撃ですが)-プライベートキーペアで同じことを行うことはほとんど不可能です。 「キーが間違った手に落ちてしまうのではないかと心配しているので、キーの秘密部分をパスワードで暗号化して、それを使用できるようにするために2つの要素が必要です(パスワードはキーチェーン/ sshエージェントによっても記憶されます)
アレックスベリー

クライアントを教育します。パスワード認証を無効にし、逆のキーのみを許可する方が良いことを説明します。
ニキータ・キプリヤノフ

20

コメントの文字列を回避するには:はい、これは安全ではありません(おそらく安全ではありません)。隔離されたネットワーク上のラボの状況、または完全なリセット/フォーマットなしで本番サーバーまたは潜在的に本番サーバーを使用しない同様の状況でのみ行うことを強くお勧めします。

2950スイッチが秘密/公開キーをサポートしているとは思わないので、これをセットアップしたかったので、ある時点でその知識を得たいと思っていますが、まだそこにいません。

エイリアスとsshpassを使用してこれを実現できます。

  1. sshpassをインストールする
  2. あなたの変更の.ssh / configには質問に記載されているユーザー名を含めるために、ファイルを
  3. 端末にエイリアスを追加します(.bashrcを使用しましたが、gloablの設定はお勧めしません)
  4. エイリアスを使用してターゲットにログインする

私のエイリアスの例:

alias ssc='sshpass -pcisco ssh'

「cisco」はパスワードです。-pとパスワードの間にスペースがないことに注意してください。

使用法は次のとおりです(質問を参照):

ssc server1

注:これは、検索エンジンを使用している人だけのタイトルの質問に答えます。質問の例のようなサーバーを使用している場合は、この回答ではなく秘密/公開キーのペアを使用する必要があります


何らかの理由で実際にキーを操作できない場合に実行できる唯一の回避策。
sjas

動作します!驚くばかり。
ラーフル

エイリアスを完全なシェルスクリプトに置き換えることをお勧めします。ホストパラメータに応じて、使用するパスワードファイルを動的に選択できます。
7heo.tk

それは多くの場合、CLIプログラムの場合のように、1つは非常によく...、-pとパスワードの間にスペースを入れて
masterxilo

10

はい、前述のとおり、パスワードを簡単に保存する方法はありません。認証にsshキーを使用することをお勧めします。

まず、キーを生成します:

ssh-keygen

次に、サーバー/デスクトップでキーをコピーします:

ssh-copy-id -i .ssh/id_rsa.pub user@ip-address:

それで全部です。パスワードの再入力を求められることはありません。

一般にパスワード認証を削除することもお勧めしますが、それはあなた次第です。


1
ssh-copy-idへの参照をありがとう!私は以前からいくつかの仕掛けを使用してsshpass -p $PASSWORD ssh $USERNAME@$HOST "echo `cat ~/.ssh/id_rsa` >> /home/$USERNAME/.ssh/authorized_keys"いましたが、このプログラムはよりクリーンで、意図を明確にします。
masterxilo

3

sshでこれを行う方法はありません。入手できる限り安全ではありません。

Danilaが述べたように、期待されるスクリプトを使用できますが、私は気にしません。

何を達成しようとしているのだろうか?あるサーバーから別のサーバーにホップしますか?この場合、ワークステーションでssh-agentをセットアップして使用し、ターゲットホストでエージェント転送を有効にします。これにより、秘密鍵をコピーすることなく、資格情報の交換がローカルエージェントにルーティングされます。


VisualStudioには、この機能が役立つアプリ固有のパスワードのような個人用アクセストークンの概念があります。
スパーダー

1

このスクリプトを~/.local/binディレクトリから使用します

#!/usr/bin/bash

ORIG_SSH=/usr/bin/ssh
HOST=$1

SSHPASS=$(grep -Pzo "Host $HOST"'\s*\n((?!Host).*\n)*#PS\s(\N+)\n' ~/.ssh/config|tail -n 2|head -n 1 | sed 's/#PS //')
if [ -n $SSHPASS ]; then
    export SSHPASS
    sshpass -e $ORIG_SSH $@
else
    $ORIG_SSH $@
fi

これにより#PS <password>.ssh/configファイル内のパスフレーズを指定できます。

しかし、誰もが言うように、可能な場合はssh-keys一緒ssh-agentに使う方が良い


0

この状況を処理する正しい方法は、セッションベースのssh-agentを使用することです。方法は次のとおりです。

$ eval `ssh-agent`
$ ssh-add /home/user/.ssh/your_key
Enter passphrase for /home/user/.ssh/your_key:

パスワードは、セッションの残りの間有効になります。最初のコマンドを実行する必要があるのは一度だけで、その後は必要なだけキーを追加できます。セッションが強制終了されると、エージェントも強制終了されるため、パスワードのハードコード化されたストレージはありません。

しばらくして、この答えがここになかったことにショックを受けました!


存在しなかった理由はおそらく、公開者/秘密鍵のペアを使用したくないとポスターが具体的に言ったためでしょう。
ジェニーDは

1
私はそれを逃した、ありがとう。それから、SSHにキーペアを使用しないのは本当に悪い考えだと付け加えます。それはより安全でより便利です...私はOPに再考するよう促します。パスフレーズなしでキーペアを使用する方が、キーペアなしでパスワードよりもはるかに安全です。しかし、理想的には、パスフレーズとキーペアを使用し、パスフレーズの保存を必要とするセッションにいる場合は、私が提供した手順を使用します。
プラナリ

-1

sshpassを使用して、より安全な方法でこれを行うことができます

  1. 履歴なしでパスワードを設定する

    export PS = your_password ; history -d $(history 1)

  2. 〜/ .ssh / configで上記のようにホストエイリアスを設定します

  3. sshパスを使用して環境変数を使用し、単一のコマンドで必要なマシンにログインします

sshpass -p $ PS ssh host_alias

環境はパスワードを保持しているため、実行中のスクリプトが実行中の内容を知らない場合、このパスワードが漏洩する可能性があります。


いいえ、それは安全ではありません。そして、それは非常にugいです。
7heo.tk

その「解決策」は問題より長くありませんか?これらのすべての追加ステップ、およびあなたはまだ入力する必要がありますsshpass -p $PS ...
ダンH
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.