NIG Supercomputer

FAQ: SSH

🆀 SSH接続時の「Permission denied (publickey)」エラーの原因と対策

クライアントとサーバーの関係は、以下の図のようになっています。

🅐 SSH接続時に「Permission denied (publickey)」エラーが発生する原因はいくつかあります。以下の確認項目を順にチェックしてください。

1. ファイルパーミッションの確認 (クライアント計算機がLinux, Mac, Windows WSLの場合)

以下の表に従って、クライアント側(ユーザーのローカルコンピュータ(自分の計算機))、サーバ側(遺伝研スパコン)の両方について、 ファイルパーミッションが正しく設定されているかを確認してください。

<table cellpadding="6" cellspacing="0">

パス(例) 役割 パーミッション 備考 /home/USERNAME/ ホームディレクトリ 750, 711, 700など ホームディレクトリに他人の書き込み権限がないことが必須。クライアント側とサーバ側の両方に存在する。
「USERNAME」には、ユーザーのアカウント名が入る。 ~/.ssh/ 鍵や設定ファイルの格納先 700 クライアント側とサーバ側の両方に置く。 ~/.ssh/id_ed25519
(または id_rsa) 秘密鍵 600 秘密鍵はクライアント側のみに置く。サーバ側に置いてはいけない。 ~/.ssh/authorized_keys 接続許可する公開鍵リスト 600 サーバに登録された公開鍵が書かれたファイル。サーバ側に存在する。クライアント側には存在しない。 /.ssh/known_hosts 接続先ホスト鍵の記録 600 または 644 クライアント側に存在する。サーバ側には存在しない。

パーミッションの確認方法(1) statコマンド

statコマンドを用いるとファイルパーミッションを数字で表示することができます。

stat -c "%a %n" your-file

実行例

you@MINIPC:~ (2025-05-05 14:07:49)
$ stat -c "%a %n" ~/.ssh
700 /home/you/.ssh
you@MINIPC:~ (2025-05-05 14:08:06)
$ stat -c "%a %n" ~/.ssh/*
600 /home/you/.ssh/authorized_keys
664 /home/you/.ssh/config
600 /home/you/.ssh/id_ed25519
644 /home/you/.ssh/id_ed25519.pub
600 /home/you/.ssh/id_rsa
644 /home/you/.ssh/id_rsa.pub
600 /home/you/.ssh/known_hosts

パーミッションの確認方法(2) ls -l

ファイルリストを表示する際に一般的に用いられているlsコマンドを用いてファイルパーミッションを表示することができます。 rwx はアクセス権を示す文字で、r=4w=2x=1 として合計した数が数字表記です。たとえば rwx------700rw-r--r--644 です。

実行例

🎯 you@MINIPC:~ (2025-05-05 14:08:37)
$ ls -l ~/.ssh
合計 80
-rw------- 1 you you     0  4月 10 18:21 authorized_keys
-rw-rw-r-- 1 you you  1373  5月  5 13:37 config
-rw------- 1 you you   419  5月  2 07:52 id_ed25519
-rw-r--r-- 1 you you   105  5月  2 07:52 id_ed25519.pub
-rw------- 1 you you  1766  3月 14 14:09 id_rsa
-rw-r--r-- 1 you you   105  3月 14 14:09 id_rsa.pub
-rw------- 1 you you 10368  5月  2 08:05 known_hosts

2. 鍵の不一致

クライアント側の秘密鍵(id_rsa など)と、サーバー側に登録されている公開鍵(authorized_keys)が一致していない場合、認証が失敗します。公開鍵と秘密鍵のペアが正しく設定されているかを確認しましょう。

3. ユーザー名の確認

SSH接続時に指定するユーザー名(USERNAME)が間違っていないか確認してください。

🆀 SSHログイン時にWARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!というエラーが出ます

🅐 遺伝研スパコンにログインしようとした際、下記のようなメッセージが表示されてログインできない場合があります。

$ ssh gw.ddbj.nig.ac.jp
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@       WARNING: POSSIBLE DNS SPOOFING DETECTED!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The RSA host key for gw.ddbj.nig.ac.jp has changed,
and the key for the corresponding IP address 133.39.228.101
is unknown. This could either mean that
DNS SPOOFING is happening or the IP address for the host
and its host key have changed at the same time.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
SHA256:xkyH37QZowWjidMSCIbOZa7Vw1p46Dxt4nF9nFJG+hk.
Please contact your system administrator.
Add correct host key in /home/username/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/username/.ssh/known_hosts:X
RSA host key for gw.ddbj.nig.ac.jp has changed and you have requested strict checking.
Host key verification failed.

SSHには、サーバーと安全に通信するために接続先サーバーの詐称を防止する機能があります。 SSH接続時に、接続先サーバーが正当なものであることを確認するため、ホストキーという暗号鍵を使ってサーバーの正当性を証明します。 接続しようとしているサーバーのホストキーが以前のものと異なっている場合、悪意のサーバーに誘導されている可能性があるので確認のために、上記のように、接続先サーバーの正当性を確認する旨の警告メッセージが表示されます。

主に以下の場合に表示されます。

この警告メッセージを解消するためには、ホストキーを保存しているknown_hostsファイルから古いホストキーを削除して、新しいホストキーに更新する必要があります。

遺伝研スパコンのゲートウェイノードは gw.ddbj.nig.ac.jp, gw2.ddbj.nig.ac.jp の2つがありますが、それぞれ ssh-keygen -R gw.ddbj.nig.ac.jp , ssh-keygen -R gw2.ddbj.nig.ac.jp を実行してください。これにより、古いホストキーがknown_hostsから削除されて次回の接続時に正しいホストキーが取得され、この警告メッセージは出なくなります。実行するときは、スパコン上ではなく、ユーザの計算機上で実行します

実行すると、この警告メッセージは出なくなりますが、Are you sure you want to continue connecting (yes/no)? と聞かれます。「yes」を入力します。
この確認メッセージは、ユーザの計算機から遺伝研スパコンのサーバに初めて接続する場合に、接続先がなりすまされた偽のサーバではなく正規のサーバであるかどうかの確認のために、表示されます。最初の1回だけ聞かれて、次回以降は表示されません。

🆀 SSH のコネクションが頻繁に切れます。

🅐 ~/.ssh/config に以下を追記してください。

Host *
    ServerAliveInterval 20
    TCPKeepAlive no

詳しくは以下ご参照ください。

🔗https://unix.stackexchange.com/questions/602518/ssh-connection-client-loop-send-disconnect-broken-pipe-or-connection-reset

🆀 Windows PowerShellからはログインできましたが、WSL2 (Windows Subsystem for Linux)上のUbuntu Linuxからはログインできないのでしょうか?

🅐 ログインできます。

現在のWindowsはWSL2を使うために最初から仮想マシンの上で動いており、WSL2上のUbuntu Linuxは別の仮想マシンとして動作します。(例えば以下のリンク🔗 https://www.thomasmaurer.ch/2019/06/install-wsl-2-on-windows-10/)

つまり一台の物理計算機の中に2台の完全に独立な仮想計算機が入っている状態で動作しています。 ディスク領域も独立になっており、この2台の仮想計算機が一台の物理計算機の中でネットワーク接続している状態で動作します。

外見上そっくりですが、PowerShellはWindows OSがのった仮想マシン上で動いており、 Ubuntuのプロンプトが表示される画面はUbuntu LinuxOSがのった仮想マシン上で動いています。

ですからPowerShellで作った秘密鍵をUbuntu Linuxの方にコピーする必要があります。

例えば以下の通りです。

you@wsl2:~$ cp /mnt/c/Users/you/.ssh/id_rsa .ssh
you@wsl2:~$ ssh your_account@gw2.ddbj.nig.ac.jp
Enter passphrase for key '/home/you/.ssh/id_rsa':
Last login: Thu Dec  1 15:33:59 2022 from XXX.XXX.XXX.XXX
---------------------------------------------------------------------
Thank you for using NIG supercomputer system.
This is the gateway node, do not run program here.
Please use 'qlogin' to login to a interactive node.
---------------------------------------------------------------------
your_account@gw4:~ (2022-12-01 15:34:50)
$