plink.exe의 환경 변수를 설정하는 방법은 무엇입니까?

plink.exe의 환경 변수를 설정하는 방법은 무엇입니까?

plinkSSH를 통해 연결하고 서버 측에서 일부 명령을 실행하는 Windows 실행 파일입니다.

예를 들어

plink myname@mycomputer ls

myname의 홈 디렉터리에서 실행된 ls 명령의 결과가 표시됩니다.

불행히도 둘 다 구현 ~/.profile되지 않았습니다 ~/.bashrc.

연결 계약이란 무엇이고 ssh, 무엇이 정의되어 있으며, 어떤 변수가 설정되고, 어떤 변수가 설정되지 않습니까? 내가 달리면

plink myname@mycomputer env

HOME, PWD및 와 같은 LOGNAME사용자별 변수가 있습니다 . 다른 설정은 어떻게 하나요?

다음 중 어느 것도 도움이 되지 않습니다.

plink myname@mycomputer sh -c env

plink myname@mycomputer bash -c env

이러한 명령은 작동하지만 "네이키드" 변수 세트를 표시합니다.

사용자를 위해 초기 스크립트를 실행하도록 쉘에 어떻게 지시합니까?

답변1

ssh실행 중인 내용을 관찰할 수 있습니다.sysdig한 터미널에서 실행한 후 다른 곳에서 실행하면 plink myname@mycomputer uptime다음과 같은 내용이 표시됩니다.

$ sudo sysdig -p '%proc.cmdline' 'evt.type = execve'
sshd
bash -c uptime
bash -c uptime
uptime

따라서 이 경우에는 bash매개변수를 사용하여 실행하고 있습니다(예를 들어 기본적으로 설치되지 않은 Alpine Linux에서는 그렇지 않을 수 있습니다 bash) -c uptime. 계속 실행해야 하는 멋진 파이프나 여러 셸 명령이 없기 때문에 이는 다소 명령 bash으로 직접 연결됩니다 .execbash

다음으로, 열려 있는 파일을 기록 bash하고 명령을 다시 실행할 수 있습니다 plink ... uptime(시스템에서 진행 중인 다른 작업에 따라 더 장황해질 수 있음).

$ sysdig 'evt.type = open and proc.name = "bash"'
7847 16:03:48.388447919 0 bash (22135) > open
7848 16:03:48.388466237 0 bash (22135) < open fd=3(<f>/etc/ld.so.cache) name=/etc/ld.so.cache flags=4097(O_RDONLY|O_CLOEXEC) mode=0
7855 16:03:48.388669720 0 bash (22135) > open
7856 16:03:48.388695391 0 bash (22135) < open fd=3(<f>/lib64/libtinfo.so.5) name=/lib64/libtinfo.so.5 flags=4097(O_RDONLY|O_CLOEXEC) mode=0
7871 16:03:48.389069345 0 bash (22135) > open
7872 16:03:48.389082901 0 bash (22135) < open fd=3(<f>/lib64/libdl.so.2) name=/lib64/libdl.so.2 flags=4097(O_RDONLY|O_CLOEXEC) mode=0
7885 16:03:48.389284722 0 bash (22135) > open
7886 16:03:48.389290872 0 bash (22135) < open fd=3(<f>/lib64/libc.so.6) name=/lib64/libc.so.6 flags=4097(O_RDONLY|O_CLOEXEC) mode=0
7921 16:03:48.391876315 0 bash (22135) > open
7922 16:03:48.391927051 0 bash (22135) < open fd=-6(ENXIO) name=/dev/tty flags=67(O_NONBLOCK|O_RDWR) mode=0
7945 16:03:48.393905761 0 bash (22135) > open
7946 16:03:48.393957884 0 bash (22135) < open fd=3(<f>/proc/meminfo) name=/proc/
meminfo flags=4097(O_RDONLY|O_CLOEXEC) mode=0
8049 16:03:48.395910893 0 bash (22135) > open
8050 16:03:48.395916693 0 bash (22135) < open fd=3(<f>/root/.bashrc) name=/root/.bashrc flags=1(O_RDONLY) mode=0

따라서 테스트 VM에서 이 내용을 읽고 있는 것으로 보입니다 /root/.bashrc. 이를 확인하기 위해 파일에 일부 콘텐츠를 추가하고 서버에서 테스트 명령을 다시 실행할 수 있습니다.

echo echo echo >> ~/.bashrc

plink ...그런 다음 다시 연결합니다(필요에 따라 명령을 조정합니다).

$ ssh gato uptime
echo
 16:05:20 up  5:19,  1 user,  load average: 0.11, 0.38, 0.27
$ 

그래서 이 경우에는.bashrc 읽고 있으므로 거기에 명령을 입력할 수 있습니다. 귀하의 사건이 왜 읽혀지지 않는지 잘 모르겠습니다 .bashrc. 무슨 일이 일어나고 있는지 추적해 보세요.

관련 정보