ssh를 통해 특정 클라이언트 시스템을 서버로 식별하십시오.


3

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

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

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

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



예, 좋은 상황이 아니라고 동의합니다. 그러나 나는 서버를 설정하고 관리하는 사람이 아닙니다. 나는 그들이 그것을 바꾸게 할 수는 있지만, 실제로는 느리고 실제로 일어날 것 같지 않다. 가능한 경우이 문제를 해결하는 것이 좋습니다.
Joe K

답변:


2

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

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

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

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


해결 방법으로 해결하는 것이 좋습니다.
Jakuje

1

매뉴얼 페이지 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.


이것들은 좋은 생각이지만, 대부분의 사람들은 종종 같은 NAT 뒤에서 연결하고 다른 사람들은 에이전트 전달을 사용합니다.
Joe K

authorized_keys파일에 키 접두사를 추가하는 또 다른 가능성이 추가되었습니다 . 여기에는 단점이 없지만 참조 용으로 남겨 두어야합니다.
Jakuje

불행히도 우리는 모두 같은 키를 공유합니다. 나는 그것이 나쁜 습관이라는 것을 알고 있지만 그것을 통제하지는 않습니다.
Joe K

그리고 당신은 ~/.ssh/authorized_keys새로운 것을 만들 수있는 쓰기 권한이 없습니까? 나쁜 습관 일뿐만 아니라 매우 나쁜 습관입니다. 그런 다음과 같은 로컬 별명을 작성해야합니다 alias ssh-host="ssh -tt host bash --rcfile your.bashrc". 우아하지는 않지만 모든 경우에 작동하지는 않지만 대화 형 쉘의 경우를 해결해야합니다.
Jakuje

중앙 관리 키는 나쁜 습관이 아니며 개인 키를 공유하는 것입니다. 답변에 언급 된 환경 문구가 접두어로 권한 부여 된 키에 engeneers의 공개 키를 더 잘 연결하십시오.
bbaassssiiee

1

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

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

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.