아래 글에 이런 문장이 있습니다.
로그인 쉘과 비로그인 쉘의 차이점은 무엇입니까?
핵심은 다음과 같습니다.
비대화형 로그인 쉘을 얻는 또 다른 방법은 터미널이 아닌 표준 입력을 통해 전달된 명령을 사용하여 원격으로 로그인하는 것입니다(
ssh example.com <my-script-which-is-stored-locally
비대화형, 비로그인 쉘을 실행하는 것과 반대) ssh example.com my-script-which-is-on-the-remote-machine
.
저자는 위의 설명에서 두 가지 결론을 도출합니다.
비대화형 로그인 셸
ssh example.com <my-script-which-is-stored-locally
비대화형, 비로그인 셸
ssh example.com my-script-which-is-on-the-remote-machine
나는 두 번째 결론이 옳다고 생각하지 않습니다.
을 실행할 때 ssh example.com my-script-which-is-on-the-remote-machine
계정 이름과 비밀번호를 로컬로 입력해야 합니다.
여전히 비대화형 로그인 쉘입니다!
로그인 쉘: 로그인 쉘은 지정된 사용자로 시스템에 로그인하며, 사용자 이름과 비밀번호가 필요합니다.
네트워크에 따라로그인 쉘에 대한 설명
비대화형 및 비로그인 쉘의 경우 예가 있습니다. mysqld 또는 apache2와 같은 일부 데몬 프로세스는 모두 비대화형 및 비로그인 쉘입니다.
당신의 차례: 참인가, 거짓인가?
답변1
ssh example.com my-script-which-is-on-the-remote-machine을 실행할 때 로컬 계정 이름과 비밀번호가 여전히 필요합니다.
여전히 비대화형 로그인 쉘입니다!
로그인 쉘의 상호작용은 "로그인 이름과 비밀번호를 입력"하는 것으로 정의되지 않습니다. 로컬은 암호 ssh
(또는 키 사용)를 묻는 메시지를 표시하고 암호를 원격 sshd
서버로 전달하며 올바르게 검증된 경우에만 암호를 제공합니다 shell
( UseLogin yes
에서 사용 하지 않는 한 sshd_config
매우 위험합니다).
답변2
전문 용어로 로그인하는 것이 핵심 개념인 로그인 쉘입니다.
Linux 작업을 설명하는 네 가지 추상 단계는 Init, Getty, Login 및 Shell입니다.
여기서 로그인은 사용자 이름을 매개변수로 사용하고 사용자에게 비밀번호를 묻는 프로그램입니다.
로컬 측:
vim /tmp/shell.sh
shopt login_shell
서버 측(내 vps 서버):
vim /tmp/shell.sh
shopt login_shell
1. 비대화형 로그인 쉘
의 일반 형식 :ssh example.com <my-script-which-is-stored-locally
ssh root@vps_ip < /tmp/shell.sh
Pseudo-terminal will not be allocated because stdin is not a terminal.
login_shell on
더 명확하게
ssh -t -t root@vps_ip < /tmp/shell.sh
Last login: Wed Mar 8 03:16:00 2017 from vps_ip
root@localhost:~$
root@localhost:~$ shopt login_shell
login_shell on
현지 번역 중단ssh -t -t root@vps_ip < /tmp/shell.sh
두 부분으로 나뉩니다.
1.ssh -t -t root@vps_ip
로그인 프로그램은 로그인할 vps의 사용자로 루트를 허용합니다. 2.
/tmp/shell.sh 의 로컬 측 스크립트가
원격 측 인터프리터에 매개변수로 전달되어 실행됩니다.
프로세스는 비대화형 로그인 셸입니다.
2. 비대화형 비로그인 셸
의 일반 형식 :SSH example.com my-script-which-is-stored-on-remote-machine
debian8@hwy:~$ssh root@vps_ip '/bin/bash /tmp/shell.sh'
login_shell off
debian8@hwy:~$
프로세스는 비대화형, 비로그인 셸입니다.
일부 트릭을 사용하면 로그인 셸로 표시될 수 있습니다.
debian8@hwy:~$ssh root@vps_ip '/bin/bash --login /tmp/shell.sh'
login_shell on
debian8@hwy:~$
전체 명령 후에 vps 서버가 로그인되지 않습니다ssh root@vps_ip '/bin/bash --login /tmp/shell.sh'구현하다.
이것로그인 셸이 열립니다.표시가 의미가 없습니다. 로그인했지만 vps 서버가 연결을 닫고 종료됩니다.
자일스의 결론 비대화형 로그인 쉘 및 비대화형 비로그인 쉘맞습니다.