SSH 연결을 통해 로컬 컴퓨터에 대한 기본 정보를 얻으려고 합니다. 여기서 목적은 내 tmux 상태 표시줄에서 현재 사용자, 호스트 이름 및 현재 작업 디렉터리를 가져오는 것입니다.
나는 ControlMaster
그것을 활성화했습니다 ~/.ssh/config
:
Host *
ControlMaster auto
ControlPath ~/.ssh/socket-%r@%h:%p
이제 홈브류 tmux 플러그인에서 성공적으로 가져왔고 ControlPath
소켓을 통해 명령을 보낼 수 있습니다.
echo $(ssh -S ~/.ssh/socket-$user@$host:$port $host "$command")
이것은 원격 호스트 이름과 사용자를 얻는 데 잘 작동합니다. 문제는 원격 사용자를 변경해도 whoami
로그인에 사용한 사용자가 계속 반환된다는 것입니다.
예를 들어 whoami
( ~
로컬로, >
SSH 세션에서 실행됨):
~ ssh soyuka@host
> whoami
soyuka
~ ssh -S ~/.ssh/socket-soyuka@host:22 host whoami
soyuka
> sudo -s
> whoami
root
~ ssh -S ~/.ssh/socket-soyuka@host:22 host whoami
soyuka #Here I want to get root because the remote user is now root
예를 들어 pwd
( ~
로컬로, >
SSH 세션에서 실행됨):
~ ssh soyuka@host
~ ssh -S ~/.ssh/socket-soyuka@host:22 host pwd
/home/soyuka
> cd downloads
> pwd
/home/soyuka/downloads
~ ssh -S ~/.ssh/socket-soyuka@host:22 host pwd
/home/soyuka #Here I want to get /home/soyuka/downloads
소켓을 통해 현재 SSH 세션에서 명령을 실행할 수 있습니까?
답변1
당신이 요구하는 것은 말이 안되는 것 같습니다.
여기서는 원격 사용자가 이제 루트이므로 루트를 얻고 싶습니다.
아니요, 이제 원격 사용자는 루트입니다. 로컬 시스템에서 수행하는 작업은 원격으로 계정에 SSH로 접속한다는 사실을 sudo -s
변경하지 않습니다 .soyuka
"여기서 /home/soyuka/downloads를 얻고 싶습니다"에 대한 대답은 비슷합니다.
소켓을 통해 현재 SSH 세션에서 명령을 실행할 수 있습니까?
지속적이고 오래 지속되는 SSH 세션이 있다는 오해가 있을 수 있다고 생각합니다. 실제로, 이 작업을 수행할 때마다:
ssh -l remoteuser host some-command
...ㅏ새로운SSH 세션이 열리고 some-command
해당 세션에서 실행된 다음(원격 명령을 지정하지 않고 열린 SSH 세션과 달리 pty 없이) 세션이 닫힙니다.
sudo
이러한 영구 원격 세션이 존재하더라도 또는 로컬로 작업을 수행하는 cd
것이 어떤 방식으로든 해당 원격 세션에 영향을 미칠 것이라고 기대할 이유가 없습니다 .
소켓을 제어하기 위해 SSH를 사용한다는 사실은 이를 전혀 바꾸지 않습니다. 슬레이브 SSH 세션과 일반 세션의 유일한 차이점은 SSH입니다.회의기존 SSH에 피기백연결하다완전히 새로운 연결이 아니라.