web-dev-qa-db-ja.com

パスワードを入力する必要がないようにSSHを設定する方法

ホストに接続するときにパスワードを入力する必要がないようにSSHを設定する方法

147
Richard Hoskins

SSHキーを生成します(持っていない場合)

あなたがたまたまGNOMEを使うなら、タツノオトシゴアプリケーション( "パスワードと暗号化キー")があなたのためにそれをすることができます:ファイル - >新しい - >セキュアシェルキー

端末を好むのであれば、ssh-keygen -t <type>を実行してキーペアを生成してください。有効な鍵ペアの種類は次のとおりです。

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

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

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

繰り返しますが、タツノオトシゴがあなたのためにそれをすることができます - 私の個人鍵で、あなたのSSH鍵を右クリックしそしてを選択セキュアシェルのキーを設定します。

または、端末の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_dsaの代わりにid_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 /クロスターミナルエージェント
     〜/ .ssh /クロスターミナルエージェント
    
160
grawity

どのUnixを使っているのか、どのUnixに接続しているのか、どのShellを使っているのか、どのSSHの変種を使っているのかなどを指定しませんでした。これは、かなり最近のバージョンのOpenSSHに基づいています。これは、多くのUNIXの亜種で使用されています。

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

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番目の2つでは、エージェントにシェルを実行させるので、シェルを終了するとエージェントも終了します。

特にあなたがグラフィカルにログインした場合は、最近の多くのUnixの変種がすでにあなたのためにエージェントを実行しているでしょう。あなたは "ps aux | grep ssh-agent"や "ps -ef | grep ssh-agent"を試すかもしれません。何かがすでに実行されている場合はそれを使用してください。

それから、最後に:

ssh-add

パスフレーズを要求します。 ssh-keygenに渡したものを渡してください。それをグラフィカルに質問させる方法もあります。これを自動化するためにssh-agentとssh-addをログインスクリプトに入れることができます(セットアップは使用するシェルによって異なります)。鍵を作成し、ssh-copy-idを使ってそれをリモートホストに設定するだけです。

これで、 "ssh username@server"は認証を求めずに動作するはずです。舞台裏では、ssh-agentが保持しているキーを使用して、エージェントにそれに魔法の署名のトリックをするよう依頼しています。

22
freiheit

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

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

次にPuTTYで、自動ログインしたい保存済みセッションをクリックして[Load]をクリックします。ここから接続 - >左ペインのデータへ行き、 "自動ログインユーザー名"にそのリモートサーバーのユーザー名を入力してください。

PuTTY username entry

その後、Connection - > SSH - > Authの順に進み、PuttyGenで作成したppkを参照してください。

PuTTY private key entry

その後、セッションページに戻って、以前にロードしたセッションを保存します。

ServerFault についての非常によく似た質問から、 ssh-copy-id を使用することをお勧めします。認証キーを設定します。

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

また、リモートユーザーのhome、〜/ .ssh、および〜/ .ssh/authorized_keysのアクセス権を変更してグループの書き込み権限を削除します(リモートsshdの設定でStrictModesが設定されていると、ログインできなくなります)。

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

あなたがする必要があるのは単にこれです:

ssh-copy-id user@Host

一度パスワードを入力すれば、移動できます。

3
Chris Bunch

Sshキーを設定する方法についてすでに説明されていること以外に、 キーチェーンssh-agentとして使用することをお勧めしますログインごとではなくシステムプロセスごとに1つだけを処理できるコンソールフロントエンド。

私はすでに同じことをする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
3
scetoaux

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

"C:\Program Files\PuTTY\putty.exe" -ssh [email protected] -pw your_password
2
Genc Hosting

私は本当に非常に長いチュートリアルのcosと本当に本当にイライラした取得した後、この非常に短いチュートリアルを書きました本当に本当に簡単です:)

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
samthebest

http://linuxproblem.org/art_9.html

あなたのねらい

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

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

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

それから、あなたがsshしたいボックスにid_AribtraryNameファイルをダウンロードしてください。接続ボックスがUNIXベースの場合、設定ファイルが必要になるかもしれません(PuTTYでは、上の誰かがそれをカバーしています)。

接続ボックス上

あなたの設定ファイルに - vim〜/ .ssh/config

ホストexample.Host.com#またはあなたのコンピューター名

ユーザーのユーザー名

IdentityFile〜/ .ssh/id_ArbitraryName

設定ファイルには600の権限が必要です。SShフォルダには700が必要です。

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

0
nerdwaller