Looking for ssh Answers? Try Ask4KnowledgeBase
Looking for ssh Keywords? Try Ask4Keywords

Secure ShellSecure Shellを使い始める


備考

SSH(Secure Shell)は、安全でないネットワーク(インターネット)上でのポイントツーポイント通信のための暗号化プロトコルです。これは、昔の古いプロトコル( rloginrshtelnet )を廃止しました。

これは、データセンターやプライベートクラウド(Google Compute Engine、AWSなど)のリモートサーバー、仮想マシン、コンテナに接続する場合によく使用されます。しかし、リポジトリへのアクセスと更新のためにgitと一緒に使用されるのは、パスワードの代わりに公開鍵を使用して安全かつ簡単に使用されます。

また、ssh内の大きなテーマについても言及し、関連するトピックにリンクする必要があります。 sshのドキュメンテーションは新しいので、これらの関連トピックの初期バージョンを作成する必要があります。 TODO

バージョン

バージョンリリースノート発売日
OpenSSH 7.3p1 最新バージョン 2016-08-01
OpenSSH 7.2p2 2016-03-09
OpenSSH 7.1p2 2016-01-14
OpenSSH 7.1 2015-08-21
OpenSSH 7.0 2015-11-08
OpenSSH 6.9 2015-07-01
OpenSSH 6.8 2015-03-18

サーバーユーザーの認証済みキーのリストに公開キーを追加する

サーバーにssh するには、IDの公開鍵を信頼できる鍵のリストに追加する必要があります。最も一般的には、これはユーザーごとに行われます。

ssh-copy-id -i ~/.ssh/<identity>.pub <user>@<hostname>
 

どちらも手動で行うことができます:

cat ~/.ssh/<identity>.pub | ssh <user>@<hostname> 'cat >> ~/.ssh/authorized_keys'
 

これを実行した後で、 ssh 呼び出しにIDファイルを渡すときにユーザーのパスワードを提供する必要なしにログインできるはずです。

設定ファイル

OpenSSH設定ファイルは、sshクライアントが実行されるたびに適用される設定に使用されます。ほとんどのコマンドラインオプションは、設定ファイルに入れることができます。

OpenSSHは、次のソースの設定を順番に使用します。

  1. コマンドラインオプション
  2. ユーザーの構成ファイル~/.ssh/config
  3. システム全体の設定ファイル/etc/ssh/ssh_config

設定オプションは、設定ファイルに1つずつ表示されます。

# This is a comment.

# Parameter can be specified like this, separated with white space.
StrictHostKeyChecking ask

# Or parameter key and value may be separated with white space and =.  
ForwardX11 = yes

# The parameter value can be quoted if it contains white space.    
IdentityFile "/file system/path with/white space"
 

可能な設定パラメータの完全なリストはここで利用できます

設定ファイルの最も有用な機能の1つは、ホスト名またはアドレスに基づいてセクション化することができることです。このようにして、ホストごとに異なる設定を行うことができます。

# Based on host name.    

Host host1.domain.com
    User user1

Host host2.domain.com
    User user2

# Or wildcard matching name or ip.

Host *elastic-cloud.com 10.201.4.?
    User user3
 

パスワードを使用したスクリプトからの接続

ssh 接続を実際にスクリプト化する必要がある場合、パスワードをssh コマンドに渡すことはssh ません( echo passw0rd | ssh host )。これは、パスワードが標準入力から読み取られるのではなく、TTY(テレプリンタ、テレタイプライタ、テレタイプの歴史的な理由から)から直接読み取られるためです。

しかし、この問題をsshpass ためのsshpass ツールがあります。パラメータ、ファイルまたは環境変数からパスワードを読み取ることができます。しかし、これらのオプションのどれもがパスワードのセキュリティ要件を満たしていないことに注意してください。

$ sshpass -p passw0rd ssh host
$ sshpass -f /secret/filename ssh host
$ SSHPASS=passw0rd sshpass -e ssh host
 

コマンドラインオプションはps 他のユーザにも見られます(実行時にはマスクされますが、開始時間には使用できず、依存することはできません)。

... 23624  6216 pts/5    Ss   Aug30   0:00  \_ /bin/bash
... 12812  1988 pts/5    S+   08:50   0:00  |   \_ sshpass -p passw0rd ssh host
... 45008  5796 pts/15   Ss+  08:50   0:00  |       \_ ssh host
 

プロセスの環境変数は、 /proc/PID/environ ファイルを使用するシステム上の他のプロセスからもアクセス可能であることに注意してください。

最後に、ファイルにパスワードを格納するのが最善の考え方に見えるかもしれませんが、他の例で説明したようにキーを使用しても、 ssh を使用するのが好ましい方法です。

SSH鍵の作成

ssh-keygenを使用してssh鍵を作成できます。これはsshインストールの一部であるプログラムです。これを実行するには、それを実行し、画面の指示に従ってください。

ここに例があります:

$ ssh-keygen
Generating public/private rsa key pair.
 

ssh鍵ペアが保存されるデフォルトのディレクトリはホームディレクトリの.ssh フォルダの中にあります(有効なパスを指定することで変更できます)。鍵ペアのデフォルト名は秘密鍵のid_rsaid_rsa.pub です。公開鍵:

Enter file in which to save the key (/home/nasreddine/.ssh/id_rsa): /home/my_folder/my_ssh_key
 

あなたは、パスワードを入力することによって、あなたのSSH鍵を不正使用から保護することができます。これはオプションですが、パスフレーズを使用することをお勧めします。他のコマンドプログラムと同様に、パスフレーズを入力すると、画面には何も表示されませんが、記録されていることに注意してください。

Enter passphrase (empty for no passphrase):
Enter same passphrase again:
 

パスフレーズを入力すると、ssh-keygenは鍵を生成し、選択したパスに保存します。

Your identification has been saved in /home/my_folder/my_ssh_key.
Your public key has been saved in /home/my_folder/my_ssh_key.pub.
 

もう終わった。これでsshキーが使用できるようになりました。

ここに画像の説明を入力

マシンにSSHを入れる方法

SSHを使用してマシン上のユーザのアカウントにログインするには、 ssh username@ip_address コマンドを使用できます。パスワードを尋ねます。正しいパスワードを入力すると、そのマシンのそのユーザーのシェルに接続されます。それ以外の場合は、パスワードの再入力を求められます。

例えば

root@dev10:~# ssh root@10.11.50.3
root@10.11.50.3's password: 
Welcome to Ubuntu 16.04 LTS (GNU/Linux 4.4.0-31-generic x86_64)
    
Last login: Fri Jul 22 18:33:27 2016 from 10.11.50.10
root@dev2:~# 
 

特定のsshキーを使用してマシンに接続する場合は、 ssh -i /path/to/ssh_secret_key username@host

初めてマシンに接続すると、ターゲットマシンの指紋を確認するように求められます。これは、 中間者攻撃を回避するためのセキュリティメカニズムです。ターゲットマシンでこのコマンドを実行すると、ターゲットマシンのフィンガープリントが表示されます。

ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ecdsa_key.pub
 

両方が同じであれば "yes"と入力できます。パスワードプロンプトに進みます。

例:

root@dev10:~# ssh root@10.11.50.3
The authenticity of host '10.11.50.3 (10.11.50.3)' can't be established.
ECDSA key fingerprint is dd:a3:de:cd:5b:01:cd:0b:b6:bc:b3:09:c2:c8:1a:68.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.11.50.3' (ECDSA) to the list of known hosts.
root@10.11.50.3's password: 

Last login: Fri Jul 22 17:45:09 2016 from 10.11.1.71
root@dev2:~# 
 

インストールまたはセットアップ

SSHプロトコル実装の無料版であるOpenSSHは、すべてのLinuxディストリビューションで利用可能です。これは、サーバーとクライアントのパッケージで構成されています。

インストール

DebianベースのLinuxでは、以下を使用してopenssh をインストールできます。

# apt-get install openssh-server openssh-client
 

RHEL / CentOSではyum を使う必要があります:

# yum install openssh-server openssh-clients
 

現在のFedoraはyum 代わりにdnf を使用しています。

Arch Linuxでは、pacmanを使用してください:

# pacman -S openssh
 

OSXでは、 openssh がすでにインストールされているはずです。

より新しいバージョンを使用したい場合は、brewからopenssh をインストールする必要があります:

# brew install openssh --with-brewed-openssl --with-keychain-support
 

Windows用のTODO命令

セットアップ

openssh クライアントは特別な設定を必要とせず、インストール直後に使用する準備ができています。あなたはssh remote を実行してみることができます。 remotessh serverを実行しているリモートホストです。

openssh サーバーは通常、インストール後に起動され、デフォルト設定が適用されます。もしそうでなければ、あなたはsystemd ベースのシステムで

システムとDebianベースのLinuxで:

# systemctl start ssh
 

RHEL / CentOS / FedoraとArch Linuxの場合:

# systemctl start sshd
 

または、アップスタートシステムで

# service sshd start
 

構成

openssh/etc/ssh/ 下に設定ファイルを持っています。クライアントは~/.ssh/config クライアント設定も読み込んでいます。サーバーはsshd_config というファイルを使用しています。このファイルには、ほとんどのデフォルト値が含まれ、単純なキーと値のペアが含まれています。例:

Protocol 2
PasswordAuthentication yes
ChallengeResponseAuthentication no
UsePAM yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY
X11Forwarding yes
Subsystem    sftp    /usr/libexec/openssh/sftp-server
 

SSHエージェント

長いパスフレーズを設定していて、サーバに接続するたびにパスワードを入力したくない場合は、コンピュータにログインしている間にSSH-Agentを使用してパスフレーズを保存できます。

バックグラウンドでssh-agentを起動します:

eval "$(ssh-agent -s)"
# Agent pid 59566
 

ssh-agentに鍵を追加すると、パスフレーズの入力を求められます:

ssh-add ~/.ssh/matrix.ac
# Enter passphrase for /home/osaka/.ssh/matrix.ac: 
# Identity added: /home/osaka/.ssh/matrix.ac (/home/osaka/.ssh/matrix.ac)
 

完了しました。今すぐssh user@matrix.ac 接続して、パスフレーズを入力する必要はありません。 gnome-keyring / seahorse、keychainなどのプログラムを使用してこれを拡張することができます。