UbuntsuにSSH接続
Ubuntuでは、デフォルトではクリップボードが使えないとのこと。
いろいろ設定して有効にできるようだが、結構めんどくさそうだった。
いつも使っているSSHクライアントから操作すれば、慣れた使い方ができるのではと思い接続を試みた。
簡単にいくと思ったが、苦戦した。(2時間くらい)
※ やる意味があるのかどうかは知りません。
SSH接続の基本
SSH接続の基本として、以下は押さえたい。
- サーバー側の設定では、ユーザー名とパスワードのみで接続できる。
- 公開鍵と秘密鍵を生成する。
- サーバー側には公開鍵を登録する。
- クライアントは秘密鍵を用いてサーバーにSSH接続する。
- サーバーは22番ポートを開けている。
- サーバーはsshのデーモンが動いている。
パスワードで接続する方法
まずは、Ubuntu(サーバー側)の設定
まずは、以下のコマンドでopensshをインストールする。
つまり、SSHの接続先として準備をする。
sudo apt-get install openssh-server
以下のコマンドで、設定ファイルを開いて、編集する。
sudo nano /etc/ssh/sshd_config
※/etc/ssh
配下に各種設定ファイルが存在する。
PasswordAuthentication
をyesにして、パスワードでのSSH接続を許可する設定に変更。
# 変更前
PasswordAuthentication no
# 変更後
PasswordAuthentication yes
設定変更後、以下のコマンドで再起動し、設定を反映させる。
sudo /etc/init.d/ssh restart
# 現在の状態を確認
sudo /etc/init.d/ssh status
また、22番ポートを開放する。
sudo ufw allow 22
以下のコマンドで、サーバー側のIPアドレスを確認。
ifconfig
コマンドがないと言われたら以下でコマンドを使えるようにする。
sudo apt install net-tools
eth0:
のinet
の値がホストのIPアドレスになる。
あとは、SSHクライアントで
- IP
- ユーザー名
- パスワード
でSSH接続。これでできるはず。
あとは、後述する公開鍵での接続に切り替えるのがセキュリティ上望ましい。
トラブルシューティング
Permission denied (publickey)
と言われる場合には。
サーバー側のパスワードでの接続OKの設定が反映されていない。
そのため、登録されていない鍵で認証しようとしてエラーになる。
また、鍵を使用した接続を試みている際は、
以下のコマンドでデバッグログを表示することができる。
ssh -vT <ユーザー名>@<IPアドレス>
公開鍵でのアクセス
まずは、サーバー側の設定
サーバー側には、公開鍵が登録されている必要がある。
具体的には、~/.ssh/authorized_keys
に公開鍵が登録されている必要がある。
※そもそもサーバー側に~/.ssh
ディレクトリがない場合は、以下のコマンドを実行すると、id_rsa
id_rsa.pub
が作られると同時にディレクトリ.ssh
も作成される。
ssh-keygen
クライアント側の設定
上記の⑥、⑦を参考に。
powershellから、以下のコマンドで生成する。
ssh-keygen -t rsa
Windowsでは、C:\Users\User1\.ssh
配下にid_rsa
とid_rsa.pub
が作られる。
※Linuxの場合は、/home/user/.ssh/id_rsa
に作られる。
###サーバー側に作成した公開鍵を登録する。
場所は ~/.ssh 直下で、ファイル名は authorized_keys
とします。このファイルの場所と名前は設定で変更することができますが、特に支障がなければデフォルトのものにしておくことをおすすめします。
公開鍵をアップロードするのがめんどうな場合は公開鍵をクリップボードにコピーして、サーバ側に authorized_keys
を生成してペーストするという原始的な方法でも可です。
接続してみる。
サーバー側のsshdのデーモンを起動。
sudo /etc/init.d/ssh start
エラーが発生
sshd: no hostkeys available -- exiting. sshd
ホストキーがないと。。
以下のコマンドで解決
sudo ssh-keygen -A
ssh-keygenのオプション
-A ホスト鍵(/etc/ssh/ssh_host_key、/etc/ssh/ssh_host_dsa_key)を生成する(root権限が必要)
これでsshdのデーモンが起動したので、SSHクライアントから接続を試みる。
秘密鍵を用いて、接続できた。