sshとsshdの使い方
概要
- secureなコンソール接続を実現できるソフトウェア
- サーバサイドを
sshd
, クライアントサイドをssh
と表現することが多い - linuxのデフォルトであるが、windowsにもインストールできる
- パスワード認証より、公開鍵暗号方式のほうがセキュアであるとされている
- 秘密鍵の管理には気を払う必要がある
sshのデバッグ
-vvv
をつけると詳細が表示される-E <path>
でログの出力先
$ ssh -E ~/ssh.log -vvv <hostname>
インストール
ubuntu, debian
$ sudo apt install openssh-server
windows
> Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
> Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
> Start-Service sshd # サービスの開始
> Set-Service -Name sshd -StartupType 'Automatic' # 自動起動に登録
> Get-NetFirewallRule -Name *ssh* # firewallの例外に設定
設定とセキュリティ
設定ファイルについて
- ubuntu, debian
/etc/ssh/sshd_config
- sshのサーバ側の設定
/etc/ssh/ssh_config
- sshのクライアント側の設定
- windows
%programdata%\ssh\sshd_config
- sshのサーバ側の設定
サーバサイドの公開鍵の配置場所について
$HOME/.ssh/authorized_keys
に公開鍵情報を書き込む
~/.ssh/known_hosts
について
- クライアントからサーバへの接続先が偽造されたときに気付けるように、フィンガープリント情報が異なるようなことがあった場合、警告がでる
sshした際のサーバサイドの環境変数について
ssh server "echo $PATH"
すると、必要なpathがサーバサイドで通っていないことがある- サーバサイドにて、
~/.ssh/environment
ファイルを作成しpathの情報を追加するPATH=/Users/<username>/.bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
- サーバサイドにて、
/etc/ssh/sshd_config
にて、以下の内容を追加してsshdを再起動するPermitUserEnvironment PATH
絶対やっておくべきセキュリティ対策
- passwordログインを無効化
- サービスの再起動
ubuntu, debian
#passwordログインの無効化
$ echo "PasswordAuthentication no" | sudo tee -a /etc/ssh/sshd_config
#ssh.serviceの再起動
$ sudo systemctl restart ssh.service
windows
> vim %programdata%\ssh\sshd_config # "PasswordAuthentication no"を追加
> Restart-Service sshd # サービスの再起動
~/.ssh/config
の書き方
/etc/ssh/sshd_configの項目
PermitRootLogin <yes|no>
- default yes
PasswordAuthentication <yes|no>
- default yes
PermitEmptyPasswords <yes|no>
- default no
PubkeyAuthentication <yes|no>
- sshのプロトコルv2で認証するか
X11Forwarding <yes|no>
- default no
AllowUsers <user1> <user2> ...
- 接続を許可するユーザ
DenyUsers <user1> <user2> ...
- 接続を禁止するユーザ
AllowGroups <group1> <group2> ...
- 接続を許可するグループ
DenyGroups
- 接続を禁止するグループ
sshdで複数のポートで待ち受ける
/etc/ssh/sshd_config
または%programdata%\ssh\sshd_config
に複数のポートを以下のように記述して再起動- 複数のstepサーバを単一のglobal IPに対してマップするときなどに使える
Port 22
Port 1022
TIPS
多くのファイルを転送する
脆弱なユーザ名とパスワードは使用しない
- 例えば、ユーザ名
test
, パスワードtest
のような脆弱な組み合わせは用いてはならない。ssh経由でログインされて、仮想通貨のバイナリ等を送られてマイニングに利用されたりするからである。
参考
- OpenSSH Server configuration for Windows Server and Windows/Microsoft Build
- Enable PowerShell SSH Remoting in PowerShell 7
トラブルシューティング
macosで突然sshできなくなる
- 原因
- sshのキー指定に対して自動で読み込む順序などがあるようで、OCIなどのクラウドの一時的なsshの秘密鍵と公開鍵を
.ssh
に置くと、configで設定したファイルが読み込まれなくなる
- sshのキー指定に対して自動で読み込む順序などがあるようで、OCIなどのクラウドの一時的なsshの秘密鍵と公開鍵を
- 対応
.ssh/oci
のようなサブフォルダに分けて管理することで解決する
- 参考