Secure Shell チュートリアル
Secure Shellを使い始める
サーチ…
備考
SSH(Secure Shell)は、安全でないネットワーク(インターネット)上でのポイントツーポイント通信のための暗号化プロトコルです。これは、昔の古いプロトコル( rlogin 、 rsh 、 telnet )を廃止しました。
これは、データセンターやプライベートクラウド(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プロトコル実装の無料版である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を実行してみることができます。 remoteはssh 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-keygenを使用してssh鍵を作成できます。これはsshインストールの一部であるプログラムです。これを実行するには、それを実行し、画面の指示に従ってください。
ここに例があります:
$ ssh-keygen
Generating public/private rsa key pair.
ssh鍵ペアが保存されるデフォルトのディレクトリはホームディレクトリの.sshフォルダの中にあります(有効なパスを指定することで変更できます)。鍵ペアのデフォルト名は秘密鍵のid_rsaとid_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 [email protected]
[email protected]'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 [email protected]
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.
[email protected]'s password:
Last login: Fri Jul 22 17:45:09 2016 from 10.11.1.71
root@dev2:~#
サーバーユーザーの認証済みキーのリストに公開キーを追加する
サーバーにsshするには、IDの公開鍵を信頼できる鍵のリストに追加する必要があります。最も一般的には、これはユーザーごとに行われます。
ssh-copy-id -i ~/.ssh/<identity>.pub <user>@<hostname>
どちらも手動で行うことができます:
cat ~/.ssh/<identity>.pub | ssh <user>@<hostname> 'cat >> ~/.ssh/authorized_keys'
これを実行した後で、 ssh呼び出しにIDファイルを渡すときにユーザーのパスワードを提供する必要なしにログインできるはずです。
パスワードを使用したスクリプトからの接続
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を使用するのが好ましい方法です。
設定ファイル
OpenSSH設定ファイルは、sshクライアントが実行されるたびに適用される設定に使用されます。ほとんどのコマンドラインオプションは、設定ファイルに入れることができます。
OpenSSHは、次のソースの設定を順番に使用します。
- コマンドラインオプション
- ユーザーの構成ファイル
~/.ssh/config - システム全体の設定ファイル
/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-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 [email protected]接続して、パスフレーズを入力する必要はありません。 gnome-keyring / seahorse、keychainなどのプログラムを使用してこれを拡張することができます。
