ssh_config
나는 정기적으로 연결하는 모든 호스트를 포함하는 파일을 정의했습니다 . 나는 호스트에 연결될 때 tmux 세션을 시작/연결하는 것을 좋아하므로 RemoteCommand tmux new -ADs remote
구성에 해당 줄을 추가했습니다. 문제는 어느 시점에서 SSH를 통해 rsync를 사용하려는 경우(가끔 사용함) 다음 오류가 발생한다는 것입니다.
Cannot execute command-line and remote command.
이 문제를 해결하려면 구성 파일의 해당 행을 주석 처리해야 하며 RemoteCommand
나중에 주석 처리를 제거하는 것을 잊지 마십시오. 이는 약간 짜증나는 일입니다...
잠재적인 해결 방법(필요하지 않거나 작동하지 않음):
-N
"원격 명령을 실행하지 마십시오"라는 플래그를 사용해 보았지만 명령이 무기한 중단됩니다.- 구성 파일에 별칭 호스트를 생성하고 싶지 않습니다. 이는 단 한 번의 사소한 변경으로 항목 수가 2배 증가한다는 의미이기 때문입니다.
Match Host
rsync를 사용하지 않고는 원격 명령을 실행할 수 없습니다
이 상황에서 도움이 될 수 있는 구성 요령이나 해결 방법을 아는 사람이 있습니까?
매우 감사합니다!
답변1
~부터오픈SSH 7.6, 명령줄 옵션이 ssh
있습니다 RemoteCommand
. 해당 지시문을 재정의하는 데 사용할 수 있습니다 ssh_config
. none
이 매개변수를 지우 려면 설정하십시오 RemoteCommand
.
따라서 ssh -o RemoteCommand=none ...
(또는 귀하의 경우 아마도 rsync -e 'ssh -o RemoteCommand=none' ...
)를 사용하여 ssh
구성 파일에 설정된 원격 명령을 무시할 수 있습니다.
최소 몇 개(현재 열려 있음)허점 보고서ssh_config
설정을 자동으로 재정의하도록 명령줄(있는 경우)에 지정된 명령을 요청합니다.
답변2
RemoteCommand
구성 파일에 넣지 마십시오 . 때로는 RemoteCommand
특정 명령을 실행하는 호스트에 대한 별칭을 정의하는 것이 유용할 수 있습니다. ssh myalias
일반 항목에는 사용되지 않습니다. 아시다시피 특정 명령 실행을 제외한 모든 작업을 차단합니다. rsync, sftp, sshfs를 사용할 수 없으며 ssh myhost specific-command
대화식으로 실행할 수도 없습니다.
호스트에 연결될 때 기본적으로 tmux를 실행하려면 두 가지 합리적인 솔루션이 있습니다.
서버에서 대화형 로그인 시 tmux를 실행하려면
.profile
유사한 로그인 시간 스크립트(.zprofile
,.config/fish/config.ish
,.login
, ...)를 편집하세요. 예를 들어 참조하십시오.SSH를 통해 연결한 후 즉시 스크립트를 실행하려면 어떻게 해야 합니까?,SSH 로그인 시 tmux 실행.클라이언트에서
ssh
tmux를 실행하는 래퍼를 정의합니다. 예를 들어 쉘 함수는 다음과 같습니다.tsh () { ssh "$@" tmux new -ADs remote }
Match host
호스트 이름을 기반으로 다른 작업을 수행하는 데 관심이 없기 때문에 지시문은 도움이 되지 않습니다. 명령이 ssh에 전달되는지 여부에 따라 ssh 클라이언트가 다른 작업을 수행할 수 있는 방법은 없다고 생각합니다. 실행 가능한 코드를 사용할 수 있습니다 Match exec
. 내 생각엔 하나도 없는 것 같아깨끗한명령을 사용하여 ssh가 호출되는지 감지하는 방법이 있지만 더러운 접근 방식으로도 충분할 수 있습니다.
Host myhost
Match exec "ps -o args= $PPID | grep -v ' .* '"
RemoteCommand if [ -t 0 ]; then exec tmux new -ADs remote; fi
ssh
옵션 없이 호스트 이름만 호출 하면 tmux가 실행됩니다. ssh
호스트 이름 외에 하나 이상의 옵션이나 명령을 사용하여 호출 하면 RemoteCommand
지시문이 적용되지 않습니다. 또한 입력이 터미널(예 echo ls | ssh myhost
: )에서 나오지 않는 경우에도 tmux를 실행하지 마세요. 이는 tmux를 실행하지 않는 대부분의 경우(예: tmux를 실행하지 않는 경우)를 해결합니다 ssh -L … myhost
.
답변3
나는 사용한다이것내 *nix 클라이언트의 모든 대화형 쉘에 RemoteCommand'ing tmux/screen을 허용하는 동시에아니요이 작업은 명령줄에서 RemoteCommand가 전달될 때 수행됩니다.
Host MYHOST exec "[[ $(ps h o args p $PPID | wc -w) -eq 2 ]]"
# matches `ssh <server>` but not `ssh <server> <cmd>`
Hostname MYHOST.LAN
User root
RequestTTY force
RemoteCommand tmux ls | grep -v attached && tmux attach || tmux new
Host MYHOST
# matches `ssh <server> <cmd>`
Hostname MYHOST.LAN
User root
Windows용 OpenSSH를 사용하여 이 작업을 수행하는 방법을 찾지 못했습니다. 혹시 어떻게 하는지 아시면 댓글 남겨주시고 알려주세요.
답변4
여기에 또 다른 가능한 해결책이 있습니다. .ssh/config 파일 끝부분에 이를 추가할 수 있습니다.
Host *-tmux
RemoteCommand tmux new -ADs remote
이렇게 하면 구성에 하나의 추가 항목만 남게 됩니다. "sshhostx-tmux"를 사용하여 연결(tmux 실행)할 수 있으며, 예를 들어 tmux를 실행하지 않고 "rsynchostx"를 사용할 수 있습니다.