![주소/포트가 사용 가능한 경우에만 SSH 포트 전달을 수행하는 방법은 무엇입니까? [복사]](https://linux55.com/image/14261/%EC%A3%BC%EC%86%8C%2F%ED%8F%AC%ED%8A%B8%EA%B0%80%20%EC%82%AC%EC%9A%A9%20%EA%B0%80%EB%8A%A5%ED%95%9C%20%EA%B2%BD%EC%9A%B0%EC%97%90%EB%A7%8C%20SSH%20%ED%8F%AC%ED%8A%B8%20%EC%A0%84%EB%8B%AC%EC%9D%84%20%EC%88%98%ED%96%89%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
기본적으로 SSH 및 포트 전달을 사용하고 싶습니다. 그래서 다음 ssh 명령을 스크립트에 추가했습니다(가상의 서버 이름 사용).
ssh -f -N user@server -L 8080:server:8080
server
원격 서버는 어디에 있습니까? 스크립트가 두 번째로 실행되는 경우를 제외하고는 모든 것이 잘 작동합니다. ssh는 불평합니다.
bind [127.0.0.1]:8080: Address already in use
ssh
포트/주소가 사용 가능한 경우에만 테스트하고 포트 전달을 수행하도록 지시하는 방법이 있습니까 ?
답변1
몇번의 검색 끝에 발견한위키북테스트는 다음과 같은 방법으로 수행할 수 있습니다.
- ControlMaster 파일을 사용하여 포트 전달 생성
ssh -f -N -M -S /tmp/ssh_pf_%r-%h-%p -L 8080:127.0.0.1:8080 server
그리고,
- ControlMaster 파일을 사용하여 연결이 설정되었는지 테스트합니다.
ssh -O check -S /tmp/ssh_pf_%r-%h-%p server
요약하면 다음은 연결이 아직 설정되지 않은 경우에만 연결을 설정합니다(두 번째 연결 시도를 저장하는 것 같습니다).
if ! ssh -O check -S /tmp/ssh_pf_%r-%h-%p server ;
then ssh -f -N -M -S /tmp/ssh_pf_%r-%h-%p -L 8080:127.0.0.1:8080 server ; fi
지적한대로이 답변, 아래와 같이 ControlMaster 파일을 사용하여 연결을 쉽게 닫을 수도 있습니다.
ssh -O exit -S /tmp/ssh_pf_%r-%h-%p server
더 나은 옵션이 있을 수 있지만 지금까지는 이것이 효과가 있는 것 같습니다.