plink
SSH를 통해 연결하고 서버 측에서 일부 명령을 실행하는 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
으로 직접 연결됩니다 .exec
bash
다음으로, 열려 있는 파일을 기록 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
. 무슨 일이 일어나고 있는지 추적해 보세요.