ForceCommand
ユーザーがSSHを使用してサーバーに接続するときに、次のスクリプトを実行するために使用します。
#!/bin/bash
echo "$USER logged in" > /home/testuser/ssh_info
/bin/bash
これでログインを試み、ssh testuser:20@<ip>
testuserのパスワードを入力してログインを試みます。 SSH接続は正常に確立されましたが、$ USERは確立されていませtestuser
んtestuser: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