たとえば、誰かがルーターの背後にあるローカルネットワーク上のコンピュータのbobアカウントにアクセスしたい場合は、単に次のように入力します。
$ ssh -p xx [email protected]`
しかし、ssh
ローカルネットワーク上の2台のコンピュータが同じユーザー名を持つ可能性をどのように処理しますか?システムAのユーザーbobとシステムBの他のユーザーbobを区別するフラグはありますか?それともssh
エラーが発生しますか?
答え1
ssh
他のホストでユーザー名を繰り返すにはなぜ注意を払うべきですか?確かにこのようなことが起こると予想されます。ヒント:root
ユーザーはどこにでもいます。そうではありませんか?
したがって、あなたの質問に対する答えは次のとおりです。ssh
他のすべてと同じ方法でアクセスします。問題のホストと話すまでどのユーザーが参照されているか気にしないでください。
上記の単純化された拡張:
最初に起こるのは、ssh
クライアントがリモートサーバーと会話を試みることですssh
。通信チャネルが開かれると、クライアントはそれが既知のホストであるかどうか(例:エントリが存在するかどうか~/.ssh/known_hosts
)を確認し、不明なホストであるか、無効な資格情報を持つ既知のホスト(たとえば、ホストキーが変更された場合)で正しく処理します。 )。
これで、すべての作業が完了しssh
、サーバーとクライアント間の通信回線が正しく開かれたので、クライアントはサーバーに「ユーザーを認証したいbob
」と言います。もちろん、サーバーはbob
ネットワーク自体にのみ興味があります。
答え2
私はGordon Davidsonのコメントがあなたの誤解を正確に指摘していると思います。
私はここに根本的な誤解があると思います。 sshは、接続するコンピュータを決定するためにユーザー名を使用しません。単に指定された宛先IPアドレス(名前で可能)とTCPポート番号に接続します。 NAT ルーターによってローカル コンピューターにリダイレクトできますが、そうであれば、ユーザー名ではなく IP とポート番号に基づいて行われます。 。
SSH標準インストールの場合、これは100%真です。 SSHに接続すると、 [email protected]
他のホストでユーザー名が見つかりません。
ただし、example.com
接続が別のコンピュータにリダイレクトされる可能性があります。時々、システムはssh
最初に接続を許可してから、ユーザー名に基づいてリダイレクトすることがあります。ただし、これは標準のSSH動作ではなく、ターゲットはサーバーに完全に設定されているリダイレクトルールによって異なります。
答え3
実際の質問に関して:
しかし、SSHは、ローカルネットワーク上の2つのシステムが同じユーザー名を持つ可能性をどのように処理しますか?システムAのユーザーbobとシステムBの他のユーザーbobを区別するフラグはありますか?それともsshでエラーが発生しますか?
デフォルトでは、すべてのLinuxシステムはユーザー、グループ、およびパスワードを3つのファイルでローカルに管理します。
/etc/password
$ head -4 /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin user1:x:1001:1001::/home/user1:/bin/bash
/etc/shadow
$ head -4 /etc/shadow root:$1$jmJYUghS$AxysSW9MzG6AmmweysZsi1::0:99999:7::: bin:*:17110:0:99999:7::: daemon:*:17110:0:99999:7::: user1:!!:17717:0:99999:7:::
/etc/group
$ head -4 /etc/group root:x:0: bin:x:1: daemon:x:2: user1:x:1001:
このファイルには実際の数値が含まれています。ファイルの次の行で確認できます/etc/password
。
user1:x:1001:1001::/home/user1:/bin/bash
これは、1001、1001のユーザーID(UID)およびグループID(GID)と同じです。このディレクトリのホームディレクトリを一覧表示すると、user1
そこにも同じ番号が表示されます。
$ ls -lnd /home/user1
drwx------ 4 1001 1001 4096 Jul 12 00:05 /home/user1
メモ:上記のコマンドではls
、数値を表示するように指定します。そうでない場合、デフォルトは名前を表示することです。
$ ls -ld /home/user1
drwx------ 4 user1 user1 4096 Jul 12 00:05 /home/user1
SSHはどうですか?
ssh
別のサーバーに接続してログインしたユーザーが含まれている場合:
$ ssh [email protected]
特定のユーザーに対して、そのサーバーにローカルに保存されている「詳細」を認証しています。 SSHの使用は通常、プライベート/公開鍵ペアを使用してssh
。
$ ls -l ~/.ssh/id_rsa*
-rw------- 1 root root 1675 Jul 21 00:50 /root/.ssh/id_rsa
-rw-r--r-- 1 root root 394 Jul 21 00:50 /root/.ssh/id_rsa.pub
この場合、ssh
SSH鍵ペアのユーザー個人部分を使用して「秘密」をリモートサーバーに送信するとき、サーバー上にあるのは鍵ペアの公開部分であり、サーバーはそれを使用してユーザーがユーザーであることを確認します。実際、あなたが言う人はまさにあなたです。
たとえば、秘密鍵の部分は次のようになります。
私のラップトップ$ ssh-keygen -l -f ~/.ssh/id_rsa
2048 SHA256:HvNN38AS9H7tIHaaE+51lqv6bgL7AmyDdqHIZIyBimg root@centos7 (RSA)
ssh
このユーザーがキーペアを使用できるクライアントを探している場合:
$ ssh-keygen -l -f ~user1/.ssh/authorized_keys
2048 SHA256:HvNN38AS9H7tIHaaE+51lqv6bgL7AmyDdqHIZIyBimg root@centos7 (RSA)
キーマッチに注意してください。