ssh -N에 대한 .ssh / config 해당 옵션은 무엇입니까


13

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

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하십시오 (스위치를 기억하기에 충분하지는 않지만 일반적으로 동일한 포트를 사용합니다. 변경되는 호스트 일뿐입니다).
WEBjuju

답변:


22

그래서에서 ssh.cOpenSSH를 7.6p1을 위해 우리가 찾을 수

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

-N두 가지도 마찬가지입니다 .

  • no_shell_flag에서만 나타납니다 ssh.c만 사용할 수 있습니다 -W또는 -N그렇지 않으면 관련 일부 로직 블록에 나타납니다, 옵션 ControlPersist배경 포크를 포함하고 정신 검사. 옵션이 직접 설정할 수있는 방법을 찾지 못했습니다.
  • 에 따라 에 해당합니다 에 설명 된 옵션 .readconf.crequest_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휴대용이지만 입력이있는 경우 (있는 경우) 또는 실패 할 수 있습니다 (표준 입력이 닫힌 경우). 또 다른 옵션은 차단하는 것을 실행하는 것입니다 .


1
내에서 작업을 수행하는 한 .ssh/config... 잘 했어!
WEBjuju

이 답변에 대한 멋진 연구! 감사합니다!
부드러운 노랑

나는 선호한다 RemoteCommand exec sleep infinity.
토마스

3

@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"
}

다음은 사용중인 세 가지 예입니다. args없이 함수에 지정된 기본값이 사용됩니다.

$ 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

0

@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.

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