SSH接続を確立するために使用される完全なユーザー名を取得する方法は?

SSH接続を確立するために使用される完全なユーザー名を取得する方法は?

ForceCommandユーザーがSSHを使用してサーバーに接続するときに、次のスクリプトを実行するために使用します。

#!/bin/bash

echo "$USER logged in" > /home/testuser/ssh_info

/bin/bash

これでログインを試み、ssh testuser:20@<ip>testuserのパスワードを入力してログインを試みます。 SSH接続は正常に確立されましたが、$ USERは確立されていませtestusertestuser:20

testuserの代わりにtestuser:20の情報を取得するには?渡された整数に基づいて別のシェルを開きたいです。

Cisco SSH サーバにも同様の機能があるため、これが可能であることがわかります。OpenSSH クライアントでユーザー名の後に続く整数で、コロンで区切られます。

答え1

"ssh"プログラムを実行する場合ssh testuser:20@<ip>- 私はそれだと仮定しますSSHを開くversion - 接続のためのログイン名として「testuser:20」をリモートSSHサーバーに送信します。

SSHサーバーはログイン名を自由に解釈できます。 OpenSSHサーバーはクライアントから受け取った完全なログイン名を記録します。ログイン名のコロンとそれに続くすべてのテキストを削除します。:

if ((r = sshpkt_get_cstring(ssh, &user, NULL)) != 0 ||
    (r = sshpkt_get_cstring(ssh, &service, NULL)) != 0 ||
    (r = sshpkt_get_cstring(ssh, &method, NULL)) != 0)
    goto out;
debug("userauth-request for user %s service %s method %s", user, service, method);
debug("attempt %d failures %d", authctxt->attempt, authctxt->failures);

if ((style = strchr(user, ':')) != NULL)   <-- Check for a colon
    *style++ = 0;                          <-- Discard it

したがって、コロンと次のテキストを含む名前は、残りのセッションでは使用できません。

OpenSSHサーバーでこの動作を変更する唯一の方法は、sshサーバープログラムのソースコードを変更して変更されたバージョンを使用するようです。OpenSSHはオープンソースですしたがって、その機能があなたにとって十分に重要である場合、これはオプションです。

あるいは、代替SSHサーバー(ほとんどまたはすべてが商用製品)を見て、そのうちの1つがこの機能を提供していることを確認できます。

答え2

一般的なLinuxディストリビューションは通常、これらのユーザー名をサポートしません。https://unix.stackexchange.com/a/157431/330987

関連情報