나는 완벽하게 유효한 ssh 명령으로 시작했습니다.
$ ssh -fNL 3306:localhost:3306 [email protected]
이 구성은 내가 원하는 부분적인 단순화를 제공합니다.
Host tunnel
HostName database.example.com
IdentityFile ~/.ssh/coolio.example.key
LocalForward 3306 localhost:3306
User coolio
다음 명령으로 연결할 수 있는데 훨씬 더 좋습니다.
$ ssh -f -N tunnel
이제 내 질문은 이 작업(또는 이와 유사한 작업)을 수행할 수 있도록 매개변수화하는 방법입니다.
$ ssh -f -N tunnel -p 3306
또는:
$ ssh -f -N tunnel -p 5678
그런데 위의 예에서는 의도적으로 두 곳에서 동일한 포트 번호를 사용했습니다. 이것이 바로 이 상황에서 나에게 필요한 것입니다. (단, 포트가 다를 경우 어떻게 매개변수화할 수 있는지도 알고 싶습니다.)
내가 지금까지 시도한 것 :
Host tunnel
HostName database.example.com
IdentityFile ~/.ssh/coolio.example.key
LocalForward %p localhost:%p
User coolio
오류가 발생합니다.
ssh/config 잘못된 전달 사양
인용하다:
http://nerderati.com/2011/03/simplify-your-life-with-an-ssh-config-file/
답변1
이것은 가장 우아한 방법은 아니지만 다음과 같이 합니다.
원본 파일의 포트 사양을 고유한 패턴으로 바꿉니다. 예를 들어:
LocalForward myport localhost:myport
ssh
별칭에서.bashrc
:alias ssh='/path/to/ssh_wrapper.pl'
파일에 쓰기
/path/to/ssh_wrapper.pl
:#!/usr/bin/perl use strict; use warnings; my $cmdline = join ' ',@ARGV; if($cmdline =~ / -p\s*([0-9]+)\b/ and $cmdline=~ / -N/){ my $port = $1; system("sed 's/myport/$port/g' /etc/ssh/ssh_config > /tmp/ssh_config"); } else{ system("sed 's/LocalForward/#LocalForward/' /etc/ssh/ssh_config > /tmp/ssh_config"); } $cmdline .= ' -F /tmp/ssh_config'; my $pid = fork; $pid ? wait : exec("/usr/bin/ssh $cmdline"); unlink '/tmp/ssh_config';
기본적으로 이는
ssh
명령줄을 구문 분석하고 숫자 포트 사양이 뒤따르는 옵션을 찾으면-p
각 항목을 명령줄에 지정한 숫자 포트 값으로 바꿔 새 옵션을 생성합니다ssh_config
. 그 후에는 명령줄을 사용하여 실제 시스템 호출을 수행합니다.자체 구성 파일을 생성하는 경우새로 생성된 구성 파일에서 읽을 수 있도록 명령줄에 옵션을 추가합니다. 마지막으로 상위 프로세스는 포크를 완료하고 임시 구성 파일을 삭제하도록 합니다./tmp/ssh_config
myport
fork
exec
ssh
-F
ssh
wait
ssh
ssh
부인 성명
이 코드는 테스트되지 않았습니다. 자신의 책임 하에 시도해 보십시오. 구성 파일을 백업하는 것부터 시작하세요!
편집하다
앞서 작성한 코드는 숫자 포트를 제공하지 않으면 "잘못된 포트 사양" 오류로 인해 중단되므로 필요하지 않은 경우를 대비하여 -p
해당 섹션을 주석 처리하는 코드를 추가했습니다 . 또한 전달하지 않고(예: 비표준 포트를 사용하는 상자로) 포트를 지정하려고 할 수 있으므로 옵션이 LocalForward
없는 한 구성 파일에서 대체가 발생하지 않는지 확인했습니다 .-N
-p
ssh
답변2
이 문제를 해결하는 더 쉬운 방법은 .bashrc에 함수를 만드는 것이었습니다.
sshfw () {
ssh -fNL "$1":localhost:"$1" "$2"
}
이제 난 할 수 있어
sshfw 8890 [email protected]