ssh를 통해 특정 클라이언트 시스템을 서버로 식별하십시오. 있으며, 우리는 모두 해당 서버에서 사용자

나는 몇몇 다른 엔지니어들과 개발 서버 / 환경을 공유하고 있으며, 우리는 모두 해당 서버에서 사용자 계정을 공유합니다.

.bashrc를 통해 구성을하고 싶을 정도로 자주 사용하지만 이러한 변경 사항이 계정을 사용하는 다른 사람에게 영향을 미치고 싶지는 않습니다. 이상적으로 나는 다음과 같은 것을하고 싶습니다 :

if [ "$SSH_CLIENT_USER" = "<me>" ]; then
    # do my config
fi

나를 고유하게 식별하는 데 사용될 수있는 ssh에 의해 설정된 환경 변수가 있습니까? 아니면 클라이언트 시스템을 차별화하는 다른 방법이 있습니까? 어쩌면 랩톱으로 식별 할 수있는 ssh 구성이 있습니까? 서버에 대한 관리자 권한이 없으며 (어쨌든 사용하고 싶지는 않습니다) 물론 랩톱 구성을 변경할 수 있습니다.



답변

Jakuje는 불행히도 모두 다른 이유로 작동하지 않는 좋은 아이디어를 많이 가지고 있었지만 에이전트 전달에 대한 제안은 저에게 효과가 있다고 생각했습니다.

ssh-add -l 사용 가능한 에이전트를 나열하고 내 키는 고유 한 작업 ID가 포함 된 랩톱의 홈 디렉토리에 저장되므로 다음을 사용할 수있었습니다.

if [[ $(ssh-add -l 2> /dev/null) == *"<my-id>"* ]]; then
    # do my config
fi

( ForwardAgent yes내 지역에서 페어링 ~/.ssh/config)


답변

매뉴얼 페이지 ssh는 가능한 답변 을 제공합니다. 이 변수가 당신에게 흥미로울 수있는 다양한 변수가 있습니다 :

항상 동일한 IP 주소 (또는 유한 세트)로 연결하면

SSH_CONNECTION

연결의 클라이언트 및 서버 끝을 식별합니다. 이 변수에는 클라이언트 IP 주소, 클라이언트 포트 번호, 서버 IP 주소 및 서버 포트 번호라는 네 개의 공백으로 구분 된 값이 포함됩니다.

변수를 정의 할 수 있습니다

인증을 위해 ssh 키를 사용하기를 바랍니다. authorized_keys파일에 키를 수정 자로 접두사로 붙이면 다음 과 같은 다른 환경 변수를 정의하십시오.

environment="WHOIAM=my-mane" ssh-rsa AAAAB3Nza...LiPk== user@example.net

그런 다음에서이 변수를 확인할 수 있습니다 ~/.bashrc. 에 대한 매뉴얼 페이지에 설명 된대로sshd

클라이언트에서 변수를 전달할 수 있습니다

서버 구성에 액세스 할 수있는 경우 선택한 환경 변수 ( SendEnvAcceptEnv옵션) 를 보내고 받도록 클라이언트와 서버를 모두 구성 할 수 있습니다 .

특별한 구성을 감지 할 수 있습니다

다른 아이디어는 ssh-agent전달 을 사용 하고 (동료가 사용하지 않는 것을 알고있는 경우) variable을 확인하는 것입니다 $SSH_AUTH_SOCK.


답변

로컬 SSH 명령 (시스템에서 서버에 연결하기 위해 실행)을 망칠 염려가 없다면 다음과 같이 실행할 수 있습니다.

ssh user@remote -t 'export SPECIAL_ID=magic; bash -l'

(이것을 스크립트 또는 쉘 별명에 넣기를 원할 것입니다).

이렇게하면 평상시처럼 새 셸이 시작되지만 먼저 체크인 할 수있는 환경 변수를 설정 .bashrc하고 친구가됩니다.

동일한 효과를 얻는 다른 방법은 파일 에서 SendEnv옵션 을 설정 .ssh/config하는 것입니다. 그러나 AcceptEnv서버 /etc/ssh/sshd_config파일 에서 적절한 옵션 을 설정해야 할 수도 있습니다. 서버-위의 솔루션은 서버에 대한 관리자 권한이 없어도 동일한 효과를 제공합니다.