Linuxリモートシェル¶
セキュアシェル¶
telnet、ftp、rsh、rcpなどはリモート計算機の操作における認証にパスワードを用い、またパスワードが平文で流れてしまいます。
ネットワークをキャプチャするとパスワードが簡単にわかってしまいます。
そこで、セキュアなリモートシェルであるssh、sftp、scpなどを使います。認証にはパスワードまたは公開鍵が使えます。セキュアシェルではパスワードが暗号化されますが、さらに公開鍵の方が安全性が高いです。
セキュリティに関する操作¶
fingerprintの確認¶
初回接続時は、サーバーのfingerprintが表示され、受け入れるかどうかを聞かれます。
C:\> ssh tom@host.example.com The authenticity of host 'foo (NNN.NNN.NNN.NNN)' can't be established. ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. This key is not known by any other names. Are you sure you want to continue connecting (yes/no/[fingerprint])?
上述は、鍵の種類にED25519が使われていると表示されています。
接続先のサーバーに信頼できる経路で接続し、/etc/ssh/ssh_host_ed25519_key.pub のfingerprintを表示し一致を確認します。
~$ ssh-keygen -lf /etc/ssh/ssh_host_ed25519_pub.key 256 SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx no comment (ED25519)
公開鍵の設定¶
接続先サーバーに、公開鍵を設定し、公開鍵認証を使用します。
接続元がWindows OSの場合、ssh-copy-idコマンドが存在しないので、scpで公開鍵ファイルを接続先に転送して接続先で公開鍵を設定します。
接続元(Windows OS)で実行¶
C:\Users\torutk> scp .ssh\id_rsa.pub tom@host.example.com:
接続先(Linux OS)で実行¶
~/.ssh ディレクトリがなければ作成します。
~$ mkdir .ssh ~$ chmod 700 .ssh
公開鍵ファイルを、~/.ssh/authorized_keys
に書き込みます。
~$ cat id_rsa.pub >> ~/.ssh/authorized_keys
コマンド操作¶
コマンド操作一覧¶
ユーザー名/認証鍵ファイルを別に作成した場合のコマンド操作¶
ローカルマシンのユーザー名とリモートマシンのユーザー名が違う場合、および認証鍵ファイルが違う場合のコマンド操作です。
リモートホスト名: host.example.com
ユーザー名: tom
ポート番号: 50022
認証鍵(秘密鍵)ファイル: ~/.ssh/id_rsa_example_com
ssh¶
~$ ssh tom@host.example.com -p 50022 -i ~/.ssh/id_rsa_example_com <コマンド>
scp¶
~$ scp -P 50022 -i ~/.ssh/id_rsa_example_com tom@host.example.com:arc
便利操作¶
sshが切れても処理を継続する¶
screen¶
screenを使って、ssh作業をssh接続が切れても継続できるようにします。
ケース1) screenをデタッチしてからscreenに再度アタッチする
- sshで接続後、screenコマンドで新規のscreen(仮想端末)を起動
~$ screen
- 作業を実行
- 作業を途中で抜ける時は、Ctrl+a d で仮想端末をデタッチ
- 実行中の仮想端末に接続(アタッチ)
~$ screen -r <ID>
実行中のscreenが1つだけの場合、ID指定を省略可能 - 作業が終わったらCtrl+dで仮想端末をシャットダウン
明示的にscreenをデタッチした場合、screenを実行しているターミナルを終了した場合は、仮想端末がデタッチ状態となるので、新しいターミナルからアタッチが可能です。しかし、ネットワークの障害でsshが切れた場合は、仮想端末がアタッチ状態のままなので、新しいターミナルからアタッチするのに別な方法を取ります。
ケース2)screenで作業中に、ネットワーク障害で接続が切れた場合
- sshで接続後、screenコマンドで新規のscreen(仮想端末)を起動
~$ screen
- 作業を実行
- 作業途中でsshが切断発生
- sshで再度接続をして、screen一覧をチェック
~$ screen -ls
IDは、screen -lsで表示される 13245.pts1.myhost... の数値部分を指定 - Attached状態のscreenに強制接続
~$ screen -d -r <ID>
実行中のscreenが1つだけの場合、ID指定を省略可能
ターミナルを共有する¶
screen¶
screenを使って、ターミナルの操作・表示を複数箇所で共有することができます。
同じログインアカウントを使って複数箇所からターミナルを接続している場合は、次の方法でターミナルを共有します。
- 共有元(オリジナル)のターミナルでscreenセッションを名前を付けて開始
$ screen -S lets_share :
- 共有先のターミナルで、screenセッションに接続
$ screen -s lets_share :
- 存在するセッション名を一覧するには、
screen -ls
を実行
- 存在するセッション名を一覧するには、