プログラミング初学者の私が、ssh接続をするまでの道のりをまとめました。
私の場合は以下でssh接続を実施
なお、参考記事を読んでよく混乱する、「サーバー側の操作なのか、クライアント側の操作なのか」は各タイトル下で、明記しています。
1. sshをインストール(クライエント側/サーバー側)
クライエント側, サーバー側双方で 以下コマンドのsshインストールを実施。
# aptitude update
# aptitude install ssh
もしかしたら、インストールは、クライエント/サーバーどちらか一方でもいいのかも(未検証)
2. sshd_configファイルで設定を行う。(サーバー側)
※ sshd_configはsshの設定を行うファイル。 サーバー側で以下の操作を行います。
sshd_config
はvimで設定/編集を行います。
vimで設定する前に、バックアップのsshd_config.old
を作成する。
# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.old
以下の手順通りにconfigファイルの設定をする。
vi /etc/ssh/sshd_config
vim起動PasswordAuthenticatio
をyesにするChallengeResponseAuthentication
をyesにする
なお、PasswordAuthenticatio
ChallengeResponseAuthentication
はパスワード認証の設定。
公開鍵をサーバー側に送る際に、パスワード設定が必要になる。
$ vi /etc/ssh/sshd_config
...(省略)
PasswordAuthentication yes
...(省略)
ChallengeResponseAuthentication yes
...(省略)
注) 自分がつまずいたポイント
変更した箇所は、行頭の#を消去する。 消去すると、画像のように、変更箇所は色が変わります。 (#を消さないと設定が反映されない?) ※画像では no と書いているが、yesでOK
行頭#を消す作業について、私が探した限りでは、ほとんどの記事には書いてないし、初見(初学者)殺しのポイントだと思う。
3. サーバ側に.sshディレクトリを作成する。(サーバー側)
目的. 公開鍵を保存するための、.sshディレクトリをサーバ側に作成。 ~ディレクトリ直下に作成する。
サーバー側で以下の操作を行います。
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
注) 自分がつまずいたポイント
.sshは隠しファイルなので、sshの前に.をつけないと、lsコマンドで表示できません。
$ ls ~/.ssh
lsコマンドで表示されないから、なんでディレクトリ作成できないんだ😂
って悩んでいました泣(実際はsshの前に.をつけておらず表示されないだけで、作成できている)
後で知りましたが、ls -a
でaオプションをつけてやると、隠しファイルまで表示されます。
なお、以下コマンドは管理者権限を示している。
$ chmod 700 ~/.ssh
700の意味は下記画像を参照。
所有者のrwx合計が7だから、7,0,0
編集の時は700に設定するが、色々設定した後、6. で600に戻す。
4. 鍵を作成する(クライアント側)
クライアント側で以下の操作を行います。
以下コマンドで鍵を秘密鍵と公開鍵を作成。
ssh-keygen -t rsa
id_rsa, id_rsa.pubの2つが作られる。.pubが公開鍵。
名前変えたい時は、上記コマンドのrsaの部分をいじる。
5. 公開鍵をサーバに送る。(クライエント側)
クライアント側で以下の操作を行います。
公開鍵の情報を、3.で作成したサーバ側にある.sshファイルに保存する。
以下やり方を示す。
scp ~/.ssh/id_rsa.pub サーバのユーザ名@サーバのIpアドレス:~/.ssh/authorized_keys
以上で送れなかったら、3.で作成した .sshディレクトリの中に、
touch authorized_keys でファイルを作成してから、再度試す。
(IPアドレスは192.xxx.xx.xxxみたいなやつ)192から始まる。
なお、ポート番号変えたい場合は以下コマンド
scp -P 10022 ~/.ssh/id_rsa.pub サーバのユーザ名@サーバのアドレス:~/.ssh/authorized_keys
デフォルトはポート22(非推奨)。ここでは10022としている。
注) 自分がつまずいたポイント
- サイトによってscp以外の方法も色々ある。 ただ、自分はscp以外の方法でやったらエラー吐いた。(原因わからず) scpで成功するまでに、色々試して時間を浪費した😭
- IPアドレスは192.xxから始まる方を選択する。 違う方を選択すると、エラー吐くので注意😭
6. サーバに送った公開鍵のパーミッション(chmod xxのこと)を変更(サーバ側)
サーバ側で以下の操作を行います。 公開鍵の権限を変更して、所有者(つまり自分のアカウント)だけが読み書きできるようにする
$ cd ~/.ssh/
$ chmod 600 authorized_keys
7.パスワード無しでログインできるか確認(クライエント側)
クライアント側で以下の操作を行います。
ssh -p 10022 (サーバのユーザ名)@(サーバのアドレス)
10022はポート番号を記入。
ここでいうサーバのアドレスは、debian上でip addr
コマンドをうち、
inetと表示されている192からはじまるIPアドレスのこと。
※ip aでは、希望のIPアドレスが表示されない。(addrなら2つIPアドレスが表示されるが、aのみの場合、1つしか表示されない)
8. パスワード認証とルート認証を不可にする
$ vi /etc/ssh/sshd_config
...(省略)
PermitRootLogin no
...(省略)
PasswordAuthentication no
...(省略)
ChallengeResponseAuthentication no
...(省略)
編集時は、編集した行頭の#を消すこと。 上記が終わったら再起動する。
最後に 「エラーを吐いたら(permission denyとか、色々)」
- とりあえず再起動する(重要)
- とりあえずコマンドにsudoつけてみる
参考にさせていただいた資料
- sshインストール http://www.bnote.net/kuro_box/ssh_inst.html
- ssh接続までの手順 https://joker.hatenablog.com/entry/2013/06/05/192336
- 補助資料として https://bootcamp.fjord.jp/reports/36276
感想
sshの章は、難しくて気が滅入っていたが、なんとか達成できた💪 短時間しか取り組めない日もあったけど、合計5日間かかった...笑 でも、5日間悩んだおかげで、ssh接続できた時の達成感はものすごくあった🤣
個人的にはこの章のsshは、フィヨルドに入った初学者の人が、最初にぶち当たる壁だと思った。 (今までの章はあまり調べずに参考URLを見てればいけたけど、sshのプラクティスにある参考リンク情報だけでは、正直厳しいと感じました。特に私のようなプログラミング初心者の場合は、この章は色々と調べないと、ゴールまでは到底辿り着けないと思いました。)
忘備録(ssh接続とは直接関係ありません)
https://joker.hatenablog.com/entry/2013/06/05/192336
vimで下記のエラーが出た時の対処法。
E45: 'readonly' option is set (add ! to override)
- 下記コマンドを実施
:w !sudo tee %
- 下記コマンドを実施して、保存できる。
:q!
参考URL:https://genchan.net/it/pc/mac/13399/
ルートユーザーでログインする方法
ssh root@ipアドレス
ターミナルでコマンド実行を中止する方法。
ctrl+c