.ssh/config에서 ssh -N에 해당하는 옵션은 무엇입니까?

.ssh/config에서 ssh -N에 해당하는 옵션은 무엇입니까?

이 명령과 동일한 결과를 사용하여 구성 파일에 별칭을 설정하고 싶습니다.

ssh -N devdb -L 1234:127.0.0.1:1234

내 .ssh/config 항목 devdb:

Host devdb
User someuser
HostName the_hostname
LocalForward 1234 127.0.0.1:1234

쉘을 시작하지 않으려면 위 구성에 무엇을 추가해야 합니까?

답변1

따라서 ssh.cOpenSSH 7.6p1에서는 다음을 찾습니다.

            case 'N':
                    no_shell_flag = 1;
                    options.request_tty = REQUEST_TTY_NO;

두 가지 더 -N:

  • 이는 or 옵션 no_shell_flag에만 나타나고 ssh.c해당 옵션에 대해서만 활성화됩니다. 그렇지 않으면 백그라운드 포크와 관련된 온전성 검사와 관련된 일부 논리 블록에 나타납니다. 직접 설정할 수 있는 옵션이 표시되지 않습니다.-W-NControlPersist
  • readconf.c해당하는 옵션 에 따라 설명됩니다 .request_ttyRequestTTYssh_config(5)

그러면 (OpenSSH를 원숭이 패치하고 다시 컴파일하거나 ssh_config옵션 전환을 요청하는 것과는 별도로 no_shell_flag...) 다음과 같은 결과가 남습니다.

Host devdb
 User someuser
 HostName the_hostname
 LocalForward 1234 127.0.0.1:1234
 RequestTTY no
 RemoteCommand cat

기술적으로는 쉘을 시작하지만 쉘은 즉시 cat프로그램으로 대체되어야 하며, 그런 다음 포트 전달의 동시 사용을 차단해야 합니다. cat이식 가능하지만 입력(있는 경우)을 소비하거나 실패할 수 있습니다(표준 입력이 닫힌 경우). 또 다른 옵션은단지 차단하는 것을 실행하십시오..

답변2

@thrig는 이 작업을 내부적으로만 수행하려는 귀하의 욕구에 따라 정답을 제공했습니다..ssh/config

다른 터널 명령을 빠르게 실행하기 위해 기본값이 있는 함수를 사용하는 것을 고려할 수도 있습니다(특히 터널이 변경되지 않고 호스트만 변경되는 경우).


sshn() {
  # set your desired host and port forwarding as default
  # and allow them to be passed in if you should need it

  host="${1:-devdb}"
  port="${2:-1234:127.0.0.1:1234}"

  # now all you have to do is `sshn` and it will connect

  echo "executing ssh -N $host -L $port"
  ssh -N "$host" -L "$port"
}

다음은 그 사용에 대한 세 가지 예입니다. 인수가 없으면 함수에 지정된 기본값이 사용됩니다.

$ sshn
executing -N devdb -L 1234:127.0.0.1:1234

다른 호스트에서 실행되는 기본 터널 사용:

$ sshn host2
executing ssh -N host2 -L 1234:127.0.0.1:1234

이 두 가지 기본값을 사용하여 새 호스트/터널에서 완전한 일회성 작업을 실행합니다.

$ sshn host3 12345:127.0.0.1:12345
executing ssh -N host3 -L 12345:127.0.0.1:12345

답변3

@thrig의 답변을 기반으로 한 더 유용한 원격 명령:

Host someHost
Hostname 1.2.3.4
LocalForward 15673 localhost:15672
RequestTTY no
RemoteCommand bash -c 'echo "Listening on port 15673"; read -r -d '' _'

read -r -d '' _사용자가 를 누를 때까지 연결이 차단 됩니다 control+c.

관련 정보