SSH 세션에 로컬 쉘 별칭을 동적으로로드

SSH 세션에 로컬 쉘 별칭을 동적으로로드

다음을 사용하여 일부 컴퓨터에 로그인할 때SSH나는 내별칭그리고기능거기 있어요. 즉, 어떤 컴퓨터에 로그인하여 명령 단축키를 사용할 수 있기를 바랍니다.

동적이어야 합니다. 로그인할 때마다 별칭을 업데이트했으면 좋겠습니다.

참고: 기계와 파일을 모르고 처음 로그인하는 경우가 많습니다. 단일 로그인인 경우도 있습니다. 해당 컴퓨터에서는 한 번만 가능합니다. 나중에 청소해야 하며 이전 구성도 복원해야 합니다.

답변1

.bashrc다른 이름으로 원격 컴퓨터에 임시로 복사할 수 있습니다 . 예를 들어 다음을 사용합니다 .bashrc_temp.

user@local$ scp .bashrc user@remote:~/.bashrc_temp

그런 다음 원격 시스템에 로그인할 수 있습니다.

user@local$ ssh user@remote

그리고source파일 .bashrc_temp:

user@remote$ source ~/.bashrc_temp

이제 귀하 .bashrc와 귀하의 기능을 사용할 수 있습니다. 작업이 끝나면 원격 시스템에서 ~/.bashrc_temp 파일을 제거하고 로그아웃할 수 있습니다.

bash 기능을 사용하면 파일을 복사하고 원격 시스템에 로그인할 수 있습니다.

# copy the .bashrc to the remote machine 
# and log into the remote machine.
# parameter $1: user@remote
function s() {
  scp ~/.bashrc $1:~/.bashrc_temp
  ssh $1
}

업데이트:

원격 시스템 및 소스에 복사하는 .bashrc것을 고려할 수도 있습니다 ./tmp/tmp/.bashrc_temp

업데이트 2:

다음을 사용하여 원격 시스템에 로그인할 수 있습니다.SSH -t. 그러면 자동으로 임시가 사용됩니다 .bashrc. 업데이트된 기능 s():

function s() {
  scp ~/.bashrc $1:/tmp/.bashrc_temp
  ssh -t $1 "bash --rcfile /tmp/.bashrc_temp ; rm /tmp/.bashrc_temp"
}

답변2

나는 sshrc가 당신이 찾고 있는 것이라고 생각합니다. https://github.com/Russell91/sshrc

sshrc는 ssh와 동일하게 작동하지만 원격으로 로그인한 후 ~/.sshrc를 소스로 제공합니다.

$ echo "echo welcome" > ~/.sshrc
$ sshrc me@myserver
welcome

$ echo "alias ..='cd ..'" > ~/.sshrc
$ sshrc me@myserver
$ type ..
.. is aliased to `cd ..'

이를 사용하여 환경 변수를 설정하고, 기능을 정의하고, 로그인 후 명령을 실행할 수 있습니다. 매우 간단하며 서버의 다른 사용자가 sshrc를 사용하더라도 영향을 미치지 않습니다. 고급 구성을 보려면 계속 읽으세요.

답변3

jens-na가 훌륭한 답변을 제공했습니다. 조금 더 나은 작업을 위해 약간의 시간을 투자하고 다시 작업했습니다. 이렇게 하면 포트 번호와 같은 매개변수를 SSH에 전달할 수 있습니다. 차이점은 다른 명령 매개변수 이름을 사용하는 대신 ssh명령을 사용하여 파일을 업로드한다는 것입니다..bashrcscp

또한 다른 파일을 업로드하므로 .bashrc_remote모든 것이 아닌 원격 서버에서 소스로 원하는 것을 정확하게 선택할 수 있습니다.

sshs() {
        ssh $@ "cat > /tmp/.bashrc_temp" < ~/.bashrc_remote
        ssh -t $@ "bash --rcfile /tmp/.bashrc_temp ; rm /tmp/.bashrc_temp"
}

다음과 같이 실행하세요:

sshs user@server

' '라는 이름 sshs은 "SSH 소스"를 나타냅니다. ssh소스를 원하지 않을 때 사용 하고 sshs소스가 필요할 때 사용하세요.

https://gist.github.com/jonahbron/5549848

답변4

이것이 내가 생각해 낸 것입니다. 이를 통해 일반 rc 파일을 유지할 수 있을 뿐만 아니라 하나의 SSH 연결에서 모든 작업을 수행할 수도 있습니다(즉, scp를 먼저 수행하는 대신 한 번만 로그인하면 됩니다).

#copies some environment over to the remote machine
function ssh() {
  /usr/bin/ssh -t $* "echo `base64 -i ~/bin/remote_ssh_env.sh` | base64 --decode > /tmp/remote_ssh_env.sh; bash --rcfile /tmp/remote_ssh_env.sh"
}

하지만 rc 파일이 어느 시점에 최대치를 초과할 수 있으므로 얼마나 클 수 있는지 잘 모르겠습니다.

관련 정보