SSH는 어떻게 자체적으로 연결됩니까?

SSH는 어떻게 자체적으로 연결됩니까?

나는 리눅스 SSH를 시도하고 있습니다. 터미널에서 제가 사용하고 있는 동일한 리눅스 박스에 연결을 시도했더니 연결이 되었습니다! 휴대폰에서 같은 전화번호로 전화를 거는 것과 같습니다! 그런데 이것이 어떻게 가능합니까?

내가 입력한 샘플 터미널 명령은 다음과 같습니다.

alpha@alpha:~$ ssh alpha@<my IP address>
alpha@<my IP address>'s password: <my password>

Welcome to Ubuntu 18.04.1 LTS (GNU/Linux 4.15.0-42-generic x86_64)

* Documentation:  https://help.ubuntu.com
* Management:     https://landscape.canonical.com
* Support:        https://ubuntu.com/advantage


* Canonical Livepatch is available for installation.
 - Reduce system reboots and improve kernel security. Activate at:
   https://ubuntu.com/livepatch

0 packages can be updated.
0 updates are security updates.

Last login: Mon Dec 10 15:31:35 2018 from <my IP address>

위의 터미널은 내가 SSH로 연결하고 있는 Linux 시스템과 위의 터미널 출력과 동일한 IP 주소를 가지고 있습니다. 또한 중첩된 연결에서 SSH를 사용하여 동일한 시스템에 연결할 수 있다는 사실을 발견하고 레벨 5 깊이까지 시도했습니다!

이게 맞는지 궁금해서 질문드립니다. 리눅스가 그것을 감지할 수 없나요?혼잣말하기?

답변1

시스템은 전화기가 아니라 건물과 같습니다.

한 건물에 여러 번 전화를 걸 수 있습니다. 건물에 있는 다른 사람에게 전화할 수 있습니다.

따라서 동일한 시스템에 ssh를 연결하면 호출이 발생합니다. 그러다가 전화를 받았습니다. 수신측에서는 호출이 동일한 시스템에서 오는지 전혀 모르고 이를 올바르게 처리합니다.

동일한 쉘/명령줄에 연결되지 않습니다. 유닉스는 멀티태스킹 시스템이다. 하나의 작업만 완료할 수 있다면 뭔가 잘못된 것입니다. 하지만 그것은 많은 일을 할 수 있습니다. 한 컴퓨터에는 많은 사용자가 있을 수 있으며 모두 자신의 작업을 수행합니다. 그 중 하나가 자아라면 괜찮습니다.

답변2

Linux에서는 일반적으로 모든 연결이 bash, 다른 UNIX의 경우 다른 쉘(및 기타 init 스크립트)에서 실행됩니다.

따라서 현재 쉘 초기화 스크립트를 사용하여 연결을 구성할 수 있습니다.행동~의SSH 클라이언트SSH 클라이언트 세션에서 생성된 환경 변수를 읽습니다.

예를 들어, /etc/bash.bashrc에서 이와 같은 내용이 있으면 자신에게 연결하지 못할 수 있습니다.

CNIP=$(echo $SSH_CONNECTION | cut -d' ' -f1)
RNIP=$(echo $SSH_CONNECTION | cut -d' ' -f3)

if [ "$CNIP" == "$RNIP" ] && [ "$CNIP" != "" ] ; then
    echo "We are connecting to ourself, exiting.." 
    exit 1
fi

따라서 Linux에서는 이를 사용하면 ssh가 서버 IP 자체로부터의 연결을 허용하지 못하게 할 수 있습니다.

Linux/Unix는 사용자 정의가 매우 가능하며, 정말로 원한다면 무한 루프로 시스템을 파괴하는 것을 포함하여 무엇이든 할 수 있습니다. 따라서 어떤 일이 발생하는 것을 방지하려면 좀 더 명확하게 설명해야 합니다.

반면에 저는 이 동작에 아무런 문제가 없다고 보고, 왜 걱정하시는지 모르겠지만, 정말로 어떤 이유로든 차단하고 싶다면 여기에 해결책이 있을 수 있습니다.

답변3

많은 경우 서버 자체와 통신하는 것이 바로 여러분에게 필요한 것입니다.

자신을 깊이 들여다보는 것이 도움이 될 때도 있을 수 있습니다 ssh(비록 그것이 업무에 가장 적합한 도구인 경우가 많다면 놀랄 것입니다).

귀하의 우려 중 하나는 이것이 일종의 위험을 초래할 수 있다는 것입니다.

아마도 그럴 수도 있지만 고전적인 포크 폭탄보다 훨씬 많지는 않습니다 :(){ :|:& };:(재부팅이 필요할 수 있다는 데 동의하지 않는 한 귀하의 방식대로 그렇게 하지 마십시오).

스크립트를 작성하고 실행한다면 echo 'ssh localhost -c ". ~/.recursive_ssh" >> ~/recursive_ssh && . ~/recursive_ssh'뭔가 나쁜 일이 발생할 수 있습니다(최상의 시나리오는 ulimit당신을 구출하고 폭탄을 죽일 것입니다).

bash이는 에서 수행하는 것과 기능적으로 크게 다르지 않습니다 bash. 다음을 시도해 볼 수 있습니다.

bash bash

일반적인 프롬프트만 표시되며, 종료하려면 두 번 종료해야 한다는 차이점이 있습니다.

듣고 싶지 않을 이유가 별로 없습니다 localhost. 실제로 대화할 수 있는 더 안전한 중재자는 없을 것입니다.

ssh물론 세션 에 무한히 재귀하는 것과 같은 어리석은 일을 할 수도 있지만 ssh그럴 필요는 없습니다.

관련 정보