hello foo bar Saba note | SSHのインストールと設定 Ubuntu/Debian

SSHのインストールと設定 Ubuntu/Debian

2017.1.4 (水)

以前のOSと比べても全くやり方変わらないのですが、いろいろとちょっと違ったりするので書いておきます。(違わないかも)

インストール

インストールはこれだけでOKです。Ubuntuならサーバー自体をクライアントとして使う場合もあるかと思うのでopenssh-clientも一緒に入れておくとよいと思います。

apt-get -y install openssh-server openssh-client

なんか設定中にいろいろやりすぎて失敗しちゃった場合は、

apt-get -y remove openssh-server openssh-client

で一度削除してからもう一度インストールしなおすとよいと思います。
インストールした時点で起動させてみる

# /etc/init.d/ssh restart
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service ssh restart

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the restart(8) utility, e.g. restart ssh
ssh start/running, process 1781

とサービスの方からrestartさせた方がいいみたいなことを言われますので、

# restart ssh

で起動させておきます。たぶんこれで警告はなくなるはず。
sshd_configの設定(ssh_configではないので注意!)
以下の内容をコピペしちゃっても構わないと思います。ポートはデフォルトの22にしていますが、22じゃない方が無難です。特に立派なファイヤーウォールとかない場合には。

# Package generated configuration file
# See the sshd_config(5) manpage for details

# What ports, IPs and protocols we listen for
Port 22
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
Protocol 2
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#Privilege Separation is turned on for security
UsePrivilegeSeparation yes
# Lifetime and size of ephemeral version 1 server key
KeyRegenerationInterval 3600
ServerKeyBits 2048
# Logging
SyslogFacility AUTH
LogLevel INFO
# Authentication:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
#RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
# Don't read the user's ~/.rhosts and ~/.shosts files
IgnoreRhosts yes
# For this to work you will also need host keys in /etc/ssh_known_hosts
RhostsRSAAuthentication no
# similar for protocol version 2
HostbasedAuthentication no
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
#IgnoreUserKnownHosts yes
# To enable empty passwords, change to yes (NOT RECOMMENDED)
PermitEmptyPasswords yes
# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no
# Change to no to disable tunnelled clear text passwords
#PasswordAuthentication yes
# Kerberos options
#KerberosAuthentication no
#KerberosGetAFSToken no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
X11Forwarding no
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
#UseLogin no
#MaxStartups 10:30:60
#Banner /etc/issue.net
# Allow client to pass locale environment variables
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication. Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM no
##### END

設定が終わったら、

# restart ssh

で、

# update-rc.d ssh defaults

もやっておくといいです。OS起動時に自動的にSSHも起動する設定。

接続テスト

$ ssh username@localhost

とやってみると一応接続できる筈です。ポートを22以外で設定している場合は、

$ ssh -p xxxx username@localhost

という風にやります。キーなんかの設定をしていないので接続はできないんですが、一応ポートも通ってSSHも動いていることが確認できます。
実際はこんな風になってしまう。

The authenticity of host 'localhost (::1)' can't be established.
RSA key fingerprint is bb:80:w2:20:05:66:2f:ds:cb:ff:40:79:7a:6f:d6:8c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
Permission denied (publickey).

キーの作成

Windowsには便利なクライアントソフトがいっぱいあるので割愛。私はMacしか使わないのでMacの方の設定をします。

RSAキーの作成

Macの端末(ターミナルでしたっけ?)を開いて、以下のコマンドで設定してゆきます。ターミナルはアプリのユーティリティーに入っていたと思います。

$ ssh-keygen -t rsa //rsaのキーの作成
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/username/.ssh/id_rsa): id_rsa //このパスにid_rsaというファイルでキーを保存する
id_rsa already exists. //以前のものが残っていたら上書きするかどうか聞いてくるので任意で。
Overwrite (y/n)? yes
Enter passphrase (empty for no passphrase)://パスワード入力
Enter same passphrase again://もう一度パスワード入力
Your identification has been saved in id_rsa.
Your public key has been saved in id_rsa.pub.
The key fingerprint is:
33:3d:6a:29:4a:93:f0:77:ec:91:37:e8:ec:xx:xx:xx username@Mac.local
The key's randomart image is:
+--[ RSA 2048]----+
¦ ¦
¦ ¦
¦ ¦
¦ . ¦
¦ . S o ¦
¦ o . . B . ¦
¦ = o Xxx ¦
¦ . + B.ss. ¦
¦ . .+*oD ¦
+-----------------+

こんな感じで作成終了。

DSAキーの作成

$ ssh-keygen -t dsa //dsaのキーの作成
Generating public/private dsa key pair.
Enter file in which to save the key (/Users/username/.ssh/id_dsa): id_dsa //このパスにid_dsaというファイルでキーを保存する
Enter passphrase (empty for no passphrase): //パスワード入力
Enter same passphrase again: //再度パスワード入力
Your identification has been saved in id_dsa.
Your public key has been saved in id_dsa.pub.
The key fingerprint is:
4c:53:4d:44:63:4b:eb:d7:d5:a5:65:9c:1f:xx:xx:xx username@Mac.local
The key's randomart image is:
+--[ DSA 1024]----+
¦ .=R +G¦
¦ . o.+.X+¦
¦ o o + %¦
¦ o . . A .o¦
¦ D . . .¦
¦ . ¦
¦ ¦
¦ ¦
¦ ¦
+-----------------+

私はRSAキーを使っているのでDSAキーは作らなくていいのですが、一応参考に。

キーの設定

.sshという風に一応隠しディレクトリになっていますが、cdなんかで移動して表示させます。作成したファイル群の確認をします。

$ ls -l
-rw------- 1 oosamuuy staff 736 8 26 2010 id_dsa
-rw-r--r-- 1 oosamuuy staff 629 8 26 2010 id_dsa.pub
-rw------- 1 oosamuuy staff 1743 8 26 2010 id_rsa
-rw-r--r-- 1 oosamuuy staff 421 8 26 2010 id_rsa.pub
-rw-r--r-- 1 oosamuuy staff 1991 12 13 22:19 known_hosts

それぞれのキーに.pubなる公開鍵が作成されています。id_rsaが秘密鍵でid_rsa.pubが公開鍵になります。これらはペアで作成されてペアで使います。DSAも同様です。で、known_hostsに接続したsshの情報が入ってきます。
id_rsa.pubの中身を何らかの方法でサーバーの方に転送します。USBメモリでもいいし、メールでもいいし、なんでもいいです。中身は、

ssh-rsa AAAA...(中略)...cOsu0SBiV5J/5h401gCetw== username@mac

みたいな感じになっているのでid_rsa.pubの中身をそのままサーバーに転送します。
なんらかの方法でサーバーで受け取ったら、

/home/username/.ssh/authorized_keys

にファイルを作ります。不親切で自動的にファイル作ってくれるとかそういう心がないので、自分で作ります。

cd /home/username/.ssh
touch authorized_keys

とか何でもいいので、適当に作って先ほどの公開鍵の文字列をコピペして保存します。geditでもvimでもviでも何でもいいです。これで設定終わりです。

接続

ssh username@<IPとかドメインとか>

で接続すると接続したホストに対してフィンガープリント(指紋)なるものを発行し接続の準備をします。で、yesで答えて、パスワード訊かれてログインできます。2回目以降はパスワードだけでログインできます。