SSHはSecure SHellの略で、ネットワーク上の他のホストへ遠隔ログインを実現するサービスで、通信データを暗号化することで安全な通信を実現する。認証には公開鍵暗号を使いログインデータを暗号化し、通信の暗号化には共通鍵暗号を使いより安全な通信を実現できる。
SSHはポート22を使っているのでファイアウォールを有効にしている場合はこのポートが解放されているかを確認すること。
多くのディストリビューションではにはOpenSSH(1)が導入されている。
自分の使っているLinuxにOpenSSHがインストールされているかを確認し、インストールされていないときはインストールする。また、最新のパッケージにアップデートする。学内でインストールするときは/etc/yum.confか環境変数http_proxyを設定しておく。
# rpm -q openssh # yum install openssh # yum check-update openssh # yum update openssh
SSHサーバプログラムは/usr/sbin/sshdで、サービスとして起動される。サーバやクライアントの設定ファイルはディレクトリ/etc/sshにあり、/etc/ssh/sshd_configがサーバ設定ファイルである。
SSHサーバを手動で起動・停止・再起動を制御するには/etc/init.d/sshdスクリプトあるいはserviceコマンドを使う。これらの操作は管理者権限で実行する。
それぞれの使用例を以下に示す。
# /etc/init.d/sshd start <- 起動 # /etc/init.d/sshd stop <- 停止 # /etc/init.d/sshd restart <- 再起動
# service sshd start <- 起動 # service sshd stop <- 停止 # service shd restart <- 再起動
SSHサーバは設定を変更しなくても動作する。この状態ではサーバ接続時にパスワードの入力が必要である。
SSHのコマンドにはssh、scp、sftp、ssh-keygen等がある。
クライアントはsshを使い、サーバへアクセスし、コマンドライン引数にはサーバ名やユーザ名を指定し、サーバにログインする。
例えば、IPアドレス192.168.1.100のSSHサーバへクライアントにログインしているユーザでログインするときはコマンドを次のように入力する。
$ ssh 192.168.1.100
また、クライアントにログインしているユーザとは異なるユーザでログインする場合はユーザ名をサーバ名の前に指定する。例えば、上記サーバ(192.169.1.100)にユーザnobitaでログインするときはコマンドを次のように入力する。
$ ssh nobita@192.168.1.100
初めてサーバへログインすると次のようなホストへの認証が証明できないといったメッセージと接続を続けるかと問われるのでyesと入力し、RSAキーをカレントディレクトリの.ssh/known_hostsファイルに保存させる。二回目以降の接続ではこのメッセージは表示されない。
$ ssh 192.168.1.89 The authenticity of host '192.168.1.89 (192.168.1.89)' can't be \ established. RSA key fingerprint is \ ac:25:14:49:e3:60:73:70:93:76:f9:2a:4f:dc:d7:e7. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.1.89' (RSA) to the list of \ known hosts. sakabe@192.168.1.89's password:
scpはsshを使ったリモートホストへのファイルコピーのコマンドで、その引数にはローカルファイル、リモートファイル、ホスト名を指定する。
例えば、カレントディレクトリのファイルtest.txtをIPアドレス192.168.1.100のサーバの自分のホームディレクトリにコピーおよび、ファイルtest1.txtをtest11.txtという名前でカレントディレクトリにコピーするときは図4.4.2.1[サーバのホームおよびサーバからのファイルのコピー]のコマンドを入力する。
$ scp test.txt 192.168.1.100: $ scp 192.168.1.100:test1.txt test11.txt
別ユーザでコピーする場合はサーバ名の前にユーザ名をsshシェルと同じ要領で付加する。
OpenSSH導入後の初期設定ではrootでサーバに直接ログインを許可しており、セキュリティ上好ましくない。rootでの直接ログインを無効にするには設定ファイル/etc/ssh/sshd_configの設定項目PermitRootLoginの値をnoに変更すればよい。
# PermitRootLogin yes <- 変更前 PermitRootLogin no <- 変更後
設定ファイルを編集し保存したら図4.5.1[設定ファイルの再読込]のいずれかのコマンドでサーバに設定を再読込させる。
# /etc/init.d/sshd reload # service sshd reload
この設定以降rootでログインを試みても許可がないと警告され、ログインできなくなっているはずである。
$ ssh root@192.168.1.89 root@192.168.1.89's password: Permission denied, please try again.
SSHサーバの初期設定ではパスワードを使ってログインだが、これに代わって公開鍵暗号を使い、より安全なログインを実現できる。
公開鍵暗号を使うためには公開鍵と秘密鍵の二つを作り、公開鍵をサーバに、秘密鍵をクライアントに設置する。
公開鍵暗号を使うための設定手順は次の通り。なお、【ク】はクライアント側、【サ】はサーバ側での作業を意味する。
2つの鍵はコマンドssh-keygenを使って作る(図4.6.2.1[ssh-keygenの使用例])。コマンドの引数で暗号方式のDSAあるいはRSAを指定する。
$ ssh-keygen -t dsa $ ssh-keygen -t rsa1 $ ssh-keygen -t rsa2
このコマンドを実行するとディレクトリ~/.sshに各暗号鍵のファイルが作成されが、ファイル名の末尾にpubが末尾に付くファイルが公開鍵を保存している。
生成された公開鍵のファイルはサーバの~/.sshにauthorized_keysという名前でコピーする。ディレクトリ~/.ssh、ファイルauthorized_keysのパーミッションをそれぞれ700と600に変更し、他のユーザが読めないようにしておく。
設定ファイル/etc/ssh/sshd_configでパスワードによるログインを無効にする設定(リスト4.6.2.1[パスワードでのログインを無効にする])をし、公開鍵暗号を使った接続に変更する。
PasswordAuthentication no
図4.6.2.2[公開鍵の転送]に暗号方式をDSA、サーバを192.168.1.100、パスワード入力を省略した時の操作例を示す。
$ scp ~/.ssh/id_dsa.pub 192.168.1.100: $ ssh 192.168.1.100 $ mkdir .ssh $ cp id_dsa.pub ~/.ssh/authorized_keys $ chmod 700 ~/.ssh $ chmod 600 ~/.ssh/authorized_keys $ sudo vi /etc/ssh/sshd_config $ sudo /etc/init.d/sshd reload
SSHシェルを使えばリモートホストでコマンドを実行させ、その結果をクライアントで表示できる。例えば、IPアドレス192.168.11.10のサーバでpsコマンドを実行するときのコマンドは図4.7.1[リモートコマンドの実行例]のように入力する。
$ ssh 192.168.11.10 ps ax
更により高い安全性を実現するためにTCP Wrapperを使い、SSHサーバへのアクセスを制限できる。TCP Wrapperはアクセス許可を/etc/hosts.allowに、アクセス拒否を/etc/hosts.denyに記す。
これらのファイルの書式は次の通り。
サービス名: ホスト名またはIPアドレス
例えば、IPアドレス192.168.1.50以外のホストからのアクセスを拒否するにはこの二つのファイルは次のように記述する。設定を変更した時点からアクセス制限が適用される。
sshd: 192.168.1.50
ALL: ALL
SSHでログインしたときにメッセージを表示させられる。表示させるメッセージは/etc/motdに記しておく。viなどのテキストエディタでこのファイルを編集すればよい。
SSHを使いX11アプリケーションのウィンドウを表示させることができる。SSHサーバの設定でX11での接続に関わる設定を下記のように変更する。
X11Forwarding yes X11DisplayOffset 10 X11UseLocalhost yes
SSHに設定を反映させたら、Xオプションを付けてサーバにアクセスする。
$ ssh -X 192.168.1.100 $ xeyes &
以下の各項目について実習せよ。