SSH 연결을 설정하는 데 사용되는 전체 사용자 이름을 얻는 방법은 무엇입니까?

SSH 연결을 설정하는 데 사용되는 전체 사용자 이름을 얻는 방법은 무엇입니까?

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 서버(대부분 또는 전부가 상용 제품임)를 살펴보고 그 중 하나가 이 기능을 제공하는지 확인할 수 있습니다.

답변2

일반적인 Linux 배포판은 일반적으로 이러한 사용자 이름을 지원하지 않습니다.https://unix.stackexchange.com/a/157431/330987

관련 정보