Sochi419のブログ

プログラミング初学者です。Ruby, JavaScriptを学習中です。猫が好きです。フィヨルドブートキャンプというスクールの受講生です。

ssh接続のやり方

プログラミング初学者の私が、ssh接続をするまでの道のりをまとめました。

私の場合は以下でssh接続を実施

なお、参考記事を読んでよく混乱する、「サーバー側の操作なのか、クライアント側の操作なのか」は各タイトル下で、明記しています。

1. sshをインストール(クライエント側/サーバー側)

クライエント側, サーバー側双方で 以下コマンドのsshインストールを実施。

# aptitude update
# aptitude install ssh

もしかしたら、インストールは、クライエント/サーバーどちらか一方でもいいのかも(未検証)

2. sshd_configファイルで設定を行う。(サーバー側)

sshd_configはsshの設定を行うファイル。 サーバー側で以下の操作を行います。

sshd_configvimで設定/編集を行います。 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
...(省略)

注) 自分がつまずいたポイント

変更した箇所は、行頭の#を消去する。 消去すると、画像のように、変更箇所は色が変わります。 (#を消さないと設定が反映されない?) image.png ※画像では 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 image.png 編集の時は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の章は、難しくて気が滅入っていたが、なんとか達成できた💪 短時間しか取り組めない日もあったけど、合計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)
  1. 下記コマンドを実施
:w !sudo tee %
  1. 下記コマンドを実施して、保存できる。
:q!

参考URL:https://genchan.net/it/pc/mac/13399/

  • ルートユーザーでログインする方法 ssh root@ipアドレス

  • ターミナルでコマンド実行を中止する方法。 ctrl+c