Bash를 사용하여 Linux에서 동일한 문제가 발생했습니다. 먼저 환경 변수 SSH_CONNECTION을 사용했지만 그 경우 설정되지 않았다는 것을 깨달았습니다 su -
.
위의 lastlog 솔루션은 su
또는 이후에 작동하지 않았습니다 su -
.
마지막으로 who am i
SSH 연결 인 경우 끝에 원격 IP (또는 호스트 이름)를 표시하는을 사용하고 있습니다. su 후에도 작동합니다.
Bash 정규 표현식을 사용하면 다음과 같이 작동합니다.
if [[ $(who am i) =~ \([-a-zA-Z0-9\.]+\)$ ]] ; then echo SSH; else echo no; fi
zsh가 정규 표현식을 지원하지 않는 경우 grep, cut, sed 등을 사용하여 여러 가지 방법으로 동일하게 수행 할 수 있습니다.
궁금한 점은 아래의 루트 .bashrc에서 내가 사용하는 것입니다.
# We don't allow root login over ssh.
# To enable root X forwarding if we are logged in over SSH,
# use the .Xauthority file of the user who did su
w=$(who am i)
if [[ $w =~ \([-a-zA-Z0-9\.]+\)$ ]] ; then
olduser=${w/ .*/}
oldhome=$(getent passwd $olduser | cut -d: -f 6)
[ -f "$oldhome/.Xauthority" ] \
&& export XAUTHORITY=$oldhome/.Xauthority
fi
함께 작동하는 대안 은 부모 프로세스 su
를 sshd
통해 반복적으로 검색 하는 것입니다 .
#!/bin/bash
function is_ssh() {
p=${1:-$PPID}
read pid name x ppid y < <( cat /proc/$p/stat )
# or: read pid name ppid < <(ps -o pid= -o comm= -o ppid= -p $p)
[[ "$name" =~ sshd ]] && { echo "Is SSH : $pid $name"; return 0; }
[ "$ppid" -le 1 ] && { echo "Adam is $pid $name"; return 1; }
is_ssh $ppid
}
is_ssh $PPID
exit $?
함수가 .bashrc에 추가되면 다음과 같이 사용할 수 있습니다 if is_ssh; then ...