パスワードを入力する必要がないようにSSHを設定するにはどうすればよいですか?


153

ホストに接続するときにパスワードを入力する必要がないようにSSHを設定するにはどうすればよいですか?


このようなキーを使用するときにパスワードが不要な場合は、議論の余地があります。あなたの秘密鍵を手に入れた人が実際にそれを悪用することを避けるために、自分自身のパスワードで鍵を保護することができます。もちろん、そのパスワードを空白のままにすることもできますが、推奨されない場合が多くあります。
アルジャン

最新のSSHを備えた最新のCygwinで、~/.ssh/config現在必要な変更を行う必要があるため、再プロンプトが表示されていました PubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss*
HDave

回答:


164

SSHキーを生成します(お持ちでない場合)

たまたまGNOMEを使用している場合、タツノオトシゴアプリケーション(「パスワードと暗号化キー」)がそれを行うことができます:ファイル -> 新規 -> セキュアシェルキー

端末を希望する場合は、実行してキーペアを生成します。有効なキーペアタイプは次のとおりです。ssh-keygen -t <type>

  • rsa:デフォルト
  • dsa:1024ビットキーに制限されることを除いて、ほぼ同等
  • ecdsa:より小さいキーを使用した同じセキュリティですが、比較的新しく、SSHソフトウェアではややまれです。
  • ed25519:高度なセキュリティ(サイドチャネル攻撃や弱い乱数ジェネレーターに対してより耐性があります)。非常に高速な署名生成。とても新しい。OpenSSH> = 6.5でのみ使用可能です。

プログラムはパスフレーズと新しいキーを保存する場所を尋ねます。推奨されるデフォルトパスを使用することをお勧めします。他のすべてのツールがそこを検索するためです。

公開鍵をリモートサーバーにアップロードする

繰り返しますが、タツノオトシゴは多くの場合、あなたのためにそれを行うことができます-My Personal Keysで、SSHキーを右クリックし、Configure key for secure shellを選択します。

または、ssh-copy-id -i ~/.ssh/id_rsa.pub remote-user@remote-hostターミナルで。

または、完全に手動で段階的に:

  1. .sshリモートホスト上のリモートユーザーのホームディレクトリに名前の付いたディレクトリ(まだ存在しない場合)を作成します。
  2. そのディレクトリに、という名前のファイルを作成しますauthorized_keys(まだ存在しない場合)。
  3. リモートumaskが通常よりもリベラルな場合は、ファイルをグループ書き込み不可にしますchmod go-w ~/.ssh ~/.ssh/authorized_keys
  4. 最後に、ローカル公開キー~/.ssh/id_rsa.pub)の内容をリモート~/.ssh/authorized_keysファイルに何らかの方法でコピー(追加)します。

キーをsshエージェントにロードします

秘密鍵をssh エージェントにロードすると、復号化された鍵がメモリに保持されます。これにより、サーバーにシェルするたびにパスワードを再入力する必要がなくなります。

まず、エージェントを起動するか、起動した通信ソケットのパスを変数にロードする必要があります。実行中のssh-agentの端末では、エージェント変数を割り当て、設定するためのコマンドを生成します。これらのコマンドは、別の端末で使用するためにファイルに保存できます。あるいは、これらのコマンドを実行し、別の端末で同じエージェントを再利用することを忘れることができます。例:eval $(ssh-agent)

キーのロードは、実行ssh-addしてパスフレーズを与えるだけの簡単な問題です。

GNOMEを使用している場合、gnome-keyring-daemonは通常ssh-agentと同じSSHエージェント機能を提供するため、何も起動する必要はありません。GNOMEはログイン時に自動的にキーをロードおよびロック解除します。

パスワードなしでリモートサーバーにシェル

すべてが正しく行われた場合、を使用してもパスワードの入力は求められません。キーではなくエージェントに問題がある場合は、ユーザーアカウントのパスワードではなく、キーのパスフレーズを入力するよう求められます。ssh user@server

通信にsshを使用するものはすべて、正しいキーがエージェントにロードされると、ユーザーアカウントのパスワードを入力しなくても機能します。scpsftprsyncなどのプログラムはこれを利用します。


ノート:

  • SSHv1は非常に安全ではなく、現在使用されていないため、SSHv2キーのみが必要です。
  • また、必要なキーは1種類のみです。RSAまたはDSAで十分です。(ed25519とECDSAはどちらも最近のものであるため、どこでもサポートされていません)。
  • これらの手順はすべて、RSAキーとDSAキーの両方で同じです。DSAを使用する場合id_dsaid_rsa、の代わりにを使用してください。ECDSAはを持ちid_ecdsaます。
  • 3.0より古いOpenSSHサーバーauthorized_keys2が使用されていますが、5.0より古いものが使用されていることはほとんどありません。
  • これらの手順は、OpenSSHバージョン3.0以降にのみ適用されます。lshssh.comおよびその他の(Unixおよびそうでない)SSHサーバーは、このチュートリアルには含まれていません。

例:

  • 公開鍵をリモートホストにコピーする:

    ssh-copy-id -i〜/ .ssh / id_rsa.pub myaccount @ remotehost#this
    
    cat〜/ .ssh / id_rsa.pub | ssh myaccount @ remotehost \
          'mkdir -p〜/ .ssh; cat >>〜/ .ssh / authorized_keys '#またはこれ
    
  • 再利用のためにエージェント変数を保存する(詳細な例)
    ssh-agent>〜/ .ssh / cross-terminal-agent
    。〜/ .ssh / cross-terminal-agent
    

7
ああ、「ssh-add {path-to-private-key-file}」と言う必要があり、それからパスフレーズを尋ねられます。投稿でこれをより明確にしてください。「4番目、sshを実行」も追加する必要があります。このようなものに関するドキュメントの問題の一部は、何が起こっているのか、これらのプログラムがどのように連携するのかわからない、プロセスに慣れていない人にとっては明らかではない、一見明らかな手順を明らかにすることです。
ジェイソンS

1
Jason:ssh-add -lは、エージェントが実行されているかどうかを確認します。引数なしのssh-addは、デフォルトの場所(〜/ .ssh / id_rsa)からキーを追加します。とにかく、更新されました。
grawity

4
ssh-copy-id公開キーをターゲットホストにコピーし、アクセス許可を自動的に設定するコマンドがあります。
ハッセン09

1
素晴らしい答えです!キーファイルのファイルパーミッションについて少し欠けています-今日、それに関連する問題がありました。私だけが秘密鍵ファイルにアクセスできるようにし、公開鍵ファイルは私だけが書き込みできるようにします。
ripper234

1
1つのライナー:(ssh-keygen -f ~/.ssh/id_rsa -N "";ssh-copy-id -i ~/.ssh/id_rsa username@server-ip-or-address単に交換するusername@server-ip-or-address)。
totymedli

22

使用しているUnix、接続しているUnix、使用しているシェル、使用しているSSHバリアントなどを指定しませんでした。これは、多くのUNIXバリアントで使用されているOpenSSHの比較的最近のバージョンに基づいています。

これはすべてローカルデスクトップシステムからのものです。

ssh-keygen

キー名には必ずデフォルトを使用してください。私はあなたがすることを示唆している、それ以外の場合は、セキュリティ上の問題だ、そのキーにパスフレーズを設定します。「-t rsa」は悪い考えではありませんが、おそらく必要ありません。

ssh-copy-id username@server

ログインに使用するパスワードを尋ねられ、authorized_keysを設定します。(手作業で行う必要はありません)

次に、これ:

`ssh-agent`

または多分これ:

exec ssh-agent sh

または:

exec ssh-agent bash

これにより、キーを保持できるSSHエージェントが起動します。最近の多くのUnixバリアントでは、グラフィカルにログインしている場合、これはすでに行われています。最初のバリアント(バックティック付き)は、ssh-agentをバックグラウンドに入れ、それと通信するための環境変数を設定します。次の2つでは、エージェントがシェルを実行するため、シェルを終了するとエージェントが終了します。

特にグラフィカルにログインしている場合、最近のUnixの多くの亜種には既にエージェントが実行されています。「ps aux | grep ssh-agent」または「ps -ef | grep ssh-agent」を試してください。既に何かが実行されている場合は、それを使用します。

そして、最後に:

ssh-add

パスフレーズを要求します。ssh-keygenに指定したものを指定します。グラフィカルに尋ねる方法もあります。また、ログインスクリプトにssh-agentとssh-addを配置して(使用するシェルによってセットアップが異なります)これを自動化できますが、一部のUnixバリアント(たとえば現在のUbuntu Linux)はそのほとんどを自動的に行うため、本当に必要なのは、キーを作成し、ssh-copy-idを使用してリモートホストにセットアップすることだけです。

これで、「ssh username@server」は認証を要求せずに機能するはずです。舞台裏では、ssh-agentが保持しているキーを使用して、エージェントにマジック署名のトリックを実行するように依頼しています。


11

WindowsのPuTTYでもこれを行うことができます。

公開鍵と秘密鍵のペアをすべて設定したら(他の回答が示すように)、PuttyGenを実行します。そこに、既にセットアップした既存の秘密鍵をロードし、PuTTY秘密鍵(ppk)として保存します。

次に、PuTTYで、自動ログインする保存済みセッションをクリックし、[ロード]をクリックします。ここから、左ペインの[接続]-> [データ]に移動し、[自動ログインユーザー名]にそのリモートサーバーのユーザー名を入力します。

PuTTYユーザー名エントリ

その後、Connection-> SSH-> Authに進み、PuttyGenで作成したppkを参照します。

PuTTY秘密鍵エントリ

次に、セッションページに戻り、以前にロードしたセッションを保存します。


最初の画像リンク「PuTTYユーザー名エントリ」は壊れているようです。
ピーターモーテンセン

2
PuTTYには独自のバージョンのssh-agentが含まれています。Pageantと呼ばれます。システムトレイで実行され、キーを保持します。ssh-agentを実行する必要はありません。PuTTYの[Auth]セクションにあるオプションで[エージェントの転送を許可する]をチェックするだけで、Pageantの接続がリモートエンドに転送され、キーエージェントが利用できるようになります。
ケビンパンコ

3

ServerFaultに関する非常に似た質問から、ssh-copy-idを使用することをお勧めします。これは、認証キーのセットアップに関連するすべてのステップを実行します。

ssh-copy-idは、sshを使用してリモートマシンにログインするスクリプトです(おそらくログインパスワードを使用するため、複数のIDを巧妙に使用しない限り、パスワード認証を有効にする必要があります)

また、リモートユーザーのホーム、〜/ .ssh、および〜/ .ssh / authorized_keysの権限を変更して、グループの書き込み可能性を削除します(そうしないと、リモートsshdの構成にStrictModesが設定されている場合、ログインできなくなります)。

-iオプションが指定されている場合、ssh-agentにキーがあるかどうかに関係なく、IDファイル(デフォルトは〜/ .ssh / identity.pub)が使用されます。

あなたがする必要があるのは、これだけです:

ssh-copy-id user@host

パスワードを1回入力すると、準備完了です!


3

sshキーの設定方法については既に説明したこととは別に、Keychainはログインごとではなくシステムプロセスごとに1つだけを処理できるssh-agentコンソールフロントエンドとしてお勧めします。

同じことをするGNOMEとKDEのツールが既にあることは知っていますが、コンソール中毒者であればこれは素晴らしいことです(そしてほとんどのUnixシステムで使用できます)。

これを使用するには、次のコードを追加します~/.bashrc(他のシェルと同様):

if type keychain >/dev/null 2>/dev/null; then
  keychain --nogui -q <all your SSH/PGP keys>
  [ -f ~/.keychain/${HOSTNAME}-sh ] && . ~/.keychain/${HOSTNAME}-sh
  [ -f ~/.keychain/${HOSTNAME}-sh-gpg ] && . ~/.keychain/${HOSTNAME}-sh-gpg
fi

2

http://linuxproblem.org/art_9.html

あなたの目標

LinuxとOpenSSHを使用してタスクを自動化したい。したがって、ホストA /ユーザーaからホストB /ユーザーbへの自動ログインが必要です。シェルスクリプト内からsshを呼び出すため、パスワードを入力する必要はありません。


1
ダウンボットは私のものではありませんでしたが、少し前に他の誰かがほぼ同様の返信を投稿したことに気付いた人が答えを削除してもかまいません。
アルジャン

2
Arjan:ほとんどの場合、私はあなたに同意しますが、投稿が数秒しか離れていない場合、その人を2位で処罰することは必ずしも公平ではないと思います。私はあなたが彼らに報酬を与える必要があると言っているわけではありませんが、ダウン投票は答えが間に合わないのではなく間違っているという印象を与えます
TheTXI 09

2

私は本当に非常に長いチュートリアルに本当にイライラしているので、この非常に短いチュートリアルを書いたので、本当に簡単です:)

test -f ~/.ssh/id_rsa.pub || ssh-keygen -t rsa #press enter twice if given prompts, then "ssh-add"

scp ~/.ssh/id_rsa.pub destID@destMachine:/tmp/ #type password

ssh destID@destMachine #type password

cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys

rm /tmp/id_rsa.pub

2

Puttyには、-pwデスクトップに次のようなショートカットを作成できるオプションがあります。

"C:\Program Files\PuTTY\putty.exe" -ssh user@192.168.2.2 -pw your_password

1
  1. 接続ホストで、を実行しssh-keygenます。(タイプを指定する必要がある場合は、doを実行しますssh-keygen -t rsa。)ファイルの場所を尋ねられたら、デフォルトを使用します。パスフレーズの入力を求められたら、Enterを押してパスフレーズを入力しません。
  2. cat ~/.ssh/id_rsa.pub(または、デフォルトのファイルの場所が何であれ、それを変えるにssh-keygen本当に古いsshインストールが必要です); 出力をクリップボードにコピーします。
  3. 通常、接続先のアカウントで宛先ホストにログインします。ファイルを編集します~/.ssh/authorized_keys~/.ssh存在しない場合はslogin、どこかに移動します。これは、適切な権限で作成するためのシンプルで簡単な方法です)。クリップボード(id_rsa.pub他のホストからのものを含む)をこのファイルに貼り付けます。

3
パスフレーズを追加しないことを提案する場合は-1。パスフレーズがなければ、ファイルを読む人は誰でも正当なユーザーになりすますことができます。
ボルツマイヤー2009

2
最初に、彼はパスワードを入力する必要がないように要求しました。パスワードの代わりにパスフレーズを入力する必要が改善されるとは思いませんでした。第二に、あなたは間違っています。そのため、公開キーと秘密キーがあり、公開キーが世界中に公開される可能性があります。
カオス

問題のパスワードは、接続するたびにではなく、キーの生成中に入力されます。正しい?
リチャード

いいえ。パスフレーズで生成されたキーでは、キーが使用されるたびにパスフレーズを入力する必要があります。
カオス

2
違う。ssh-agent(受け入れられた回答を参照)では、セッションごとに1回だけパスワードを入力します。
ボルツマイヤー2009

0

Linuxのターミナルですべてを実行する場合:

ホスト上

cd〜/ .ssh /

ssh-keygen -t {rsa | dsa} -b {1024 | 2048 | 4096} -C「必要に応じてコメントテキスト」-f id_ArbitraryName

{}の項目はオプションで、rsaまたはdsaを使用してビットサイズを選択します(大きいほど安全です)

次に、authorized_keysおよびauthorized_keys2ファイルにアクセス許可を追加する必要があります。

cat id_ArbitraryName.pub >> authorized_keys

cat id_AribtraryName.pub >> authorized_keys2

次に、id_AribtraryNameファイルを、sshを実行するボックスにダウンロードします。接続ボックスがUNIXベースの場合、設定ファイルが必要になる場合があります(パテでは、上記の誰かがそれを説明しました)。

接続ボックス上

設定ファイル-vim〜/ .ssh / config

ホストexample.host.com#またはコンピューター名

ユーザー名

IdentityFile〜/ .ssh / id_ArbitraryName

構成ファイルには600のアクセス許可が必要です。SShフォルダーには700が必要です。

あなたがたくさん省略されている設定の問題に遭遇した場合に役立つことを願っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.