SSH 로그인에서 자동으로 명령을 실행하는 방법은 무엇입니까?


18

Linux 서버에 로그인 할 때마다 몇 가지 명령을 자동으로 실행하고 싶습니다 (일부 변수 설정, 위치 변경 등).

시스템 시작이 아닌 사용자 로그인시 수행해야합니다.

이를 위해 어떻게 설정할 수 있습니까?


bash (1) ( man bash)의 INVOCATION 섹션을 읽어야합니다 .
Andrew Schulman

답변:


31

에 명령을 넣습니다 ~/.bashrc. 로그인 할 때마다 실행됩니다.

ssh를 통해 로그인 할 때만 (물리적으로 로그인 할 때) 실행해야하는 명령이 필요한 경우 SSH_CONNECTION환경 변수 가 있는지 테스트 하고 명령이 존재하는 경우에만 명령을 실행할 수 있습니다.


루트로 로그인하지 않고 AWS 서버이므로 "ec2-user"로 로그인 한 다음 "sudo su-"를 사용하여 루트로 변경해야합니다. "/home/ec2-user/.bashrc"에 명령을 넣어야합니까?

5
~ / .bashrc가 ~ / .bash_profile에서 제공되었다고 가정합니다. ~ / .bash_profile은 ssh와 같은 로그인 쉘에 대해 호출되는 스크립트입니다. 예를 들어 이미 로그인 한 후 Gnome 터미널을 열면 ~ / .bashrc가 호출됩니다.
dgrant

혼란스러워 자세히 설명하겠습니다. 이것은 사실상 서버 인 Amazon Web Services 인스턴스이므로 아무도 실제로 로그인하지 않습니다 (물리적으로 하나의 머신으로 존재하는지 확실하지 않습니다). 사용자 이름 ec2-user로 PUTTY를 사용하여 로그인합니다. 이것은 / home / ec2-user 디렉토리에 저를 떨어 뜨립니다. 그런 다음 "sudo su-"를 입력하여 루트 사용자로 변경 한 다음 "/ root"로 이동하여 "/ home / ec2-user"로 다시 변경하고 일부를 설정하는 등 일련의 명령을 입력해야합니다. 변수, 별칭 등. 그래서 ... 어떻게하면됩니까?

또한 사용자를 변경하고 있기 때문에 ec2-user bash 프로필에서 "sudo su-"만 입력 한 다음 나머지 명령을 루트 bash 파일에 넣어야한다고 생각합니다.

참고 : 실제로 .bash_profile이 존재하지 않는 한 실제로 호출되면 호출되는 .profile입니다.
dgrant

14

모든 사용자에게 이것을 원한다면 이것을 ~ / .bashrc 또는 /etc/bash.bashrc에 넣으십시오.

if [[ -n $SSH_CONNECTION ]] ; then
    echo "I'm logged in remotely"
fi

실행을 닫은 후 세션을 어떻게 잃습니까?
e-info128

1
@WHK 세션을 잃었다는 것은 무슨 뜻입니까?
Llamageddon

@Llamageddon : 나는 그가 같은 것을 궁금해하고 있다고 생각합니다. 전체 SSH 세션을 screen에 넣고 싶다면 응답을 사용 screen하고 에코 대신 사용할 수 있습니다 . 문제는 스크린 세션을 마치면 로그 아웃하는 대신 SSH 프롬프트로 돌아 간다는 것입니다. 이 주석을 작성하면 대답이 나옵니다 . logout명령 뒤에 명령을 추가하십시오 screen.
zondo

그러나 이것은 bash를 사용하지 않는 ssh 세션에서는 작동하지 않습니다 (예 : sftp 세션을 열 때).
Fabio

@zondo @ e-info128 exec command은 현재 쉘을 실행 한 것으로 바꿉니다 .
Llamageddon

6

또는 다음을 호출하는 동안 실행할 명령을 지정할 수 있습니다 ssh.

$ ssh -t server 'cmd; exec bash -l'

목록의 마지막 명령은 선호하는 쉘에서 대화식 세션을 시작해야합니다. 실행할 명령이 많으면 SSH 서버에서 스크립트 파일을 작성하십시오.


1
이것은 매우 유용합니다. 질문자가 정확히 대답 한 것인지 확실하지 않지만, 명확하지 않을 수 있으므로 사람들이 알아야합니다. 예를 들어 "ssh user @ host"export x = 5; bash "그러면 echo $ x가 팝업되는 터미널에 5가 표시됩니다.
clearlight

3

사실 ~/.ssh/rc때 실행할 명령을 추가 할 수있는 권리 곳입니다 당신이 로그인 오히려 시스템의 모든 사용자보다가.

 ~/.ssh/rc
         Commands in this file are executed by ssh when the user logs in,
         just before the user's shell (or command) is started.  See the
         sshd(8) manual page for more information.

반드시 그런 것은 아닙니다. 그것은이다 명령을 배치 할 수 있습니다 위치.
Daniel B


그들이 무엇을하고 있는지 모른다면 정말 문제가 될 수 있습니다. 그것은 코너의 경우 잠재적으로 유용하지만, 그 수 정말로 그들이 잊어 버린 경우 엉망 누군가가이 명령을 넣어 또는 이름과 해당 파일의 경로. 일반적으로 시작 로그인 명령을 예상 위치 인 .bashrc에 원격 위치에 놓고 $ SSH_CONNECTION을 테스트하는 것이 좋습니다.
clearlight
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.