SSH 로그인에서 사용자 정의 .bashrc 파일을 사용하는 방법


21

나는 함께 일하는 새로운 회사와 함께 비교적 짧은 수명으로 리눅스 서버에 액세스해야한다는 것을 알았습니다. 이러한 각 서버에는 계정이 있지만 새 계정을 만들 때마다 .bashrc를 통해 전송해야하는 번거 로움을 거쳐야합니다. 그러나 약 몇 달 안에 서버가 더 이상 존재하지 않을 수 있습니다. 또한 .bashrc를 통해 전송하는 것이 가치가 없지만 짧은 시간 (분) 동안 다른 많은 서버에 액세스해야하지만 많은 서버에서 작업하고 있기 때문에 많은 시간이 낭비됩니다.

서버에서 아무 것도 변경하고 싶지 않지만 "연결 당".bashrc를 갖는 방법이 있는지 궁금해서 서버에 SSH를 연결할 때마다 해당 설정이 해당 세션에 사용됩니다.

이것이 가능하다면 gitconfig 파일과 같은 다른 구성 파일로 동일한 작업을 수행 할 수 있다면 좋을 것입니다.


이것은 연결 별 솔루션은 아니지만 여전히 유용 할 수 있습니다. GitHub 기반 을 확인하십시오 . 답변에 대한 자세한 내용은 슈퍼 유저 커뮤니티에 있습니다.
codeforester

답변:


6

나는 당신이 원하는 것이 (연결하는 컴퓨터의 .ssh / config에 있음) 생각합니다.

PermitLocalCommand yes
LocalCommand scp yourname@someserver:/dir/dotbash /local/home/dir/.bashrc

다음과 같이 이끌어 낼 수 있습니다.

source .bashrc

그리고 당신의 즐거운 길에 있습니다. LocalCommand는 실제 세션 직전에 연결되어있는 서버에서 명령을 실행합니다.

또한 서버의 sshd가 다음과 같이 구성되어 있는지 확인합니다. PermitLocalCommand yes

LocalCommand를 조정하여 특정 환경에서 작동하도록하는 방법에는 여러 가지가 있습니다. 예를 들어 내부 웹 서버에서 말리거나 nfs 마운트에서 가져올 수 있습니다.


몇 가지 메모. 우선, 내 배쉬를 서버로 전송하고 싶기 때문에 scp 명령에서 파일 순서를 전환했다고 생각합니다. 둘째, ; source /path/to/.bashrcscp 명령 뒤에 자동으로 소스를 추가 하기 위해 추가 할 수 있습니다 . 마지막 으로이 방법의 중요한 단점은 암호를 두 번 입력해야한다는 것입니다. 그러나 결국 그것은 효과가 있었으므로 감사했습니다.
gsingh2011

미안합니다! 내 머리에서 일하고 있었으므로 믹스 업에 대해 죄송합니다. 환경에서 비밀번호없는 키 설정을 설정할 수 있습니까? 우리는 환경에 그것을 가지고 있으며 그것은 아름다운 것입니다. 그래도 기뻤습니다!
Quinn Murphy

@ gsingh2011 : source /path/to/.bashrc연결하려는 머신에서 실행됩니다. 의 명령 LocalCommand은 ssh 세션에 액세스 할 수 없습니다.
Oliver

@Oliver 당신이 맞아요. 원격 컴퓨터에서 .bashrc의 소싱을 자동화하기로 결정했습니다. 처음 로그인 할 때 서버 측에서 몇 가지 사항을 변경해야하지만 이전에 수행했던 것보다 훨씬 편리합니다.
gsingh2011

16

나는 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를 사용하더라도 서버의 다른 사용자에게는 영향을 미치지 않습니다. 보다 고급 구성을 보려면 계속 읽으십시오.


링크 전용 게시물로 스팸을 차단하십시오. 주석 (sshrc 관련 게시물은 어쨌든)을 완벽하게 추가 할 수 있습니다.
Deer Hunter

3
나는 그들 모두를 고치기 위해 노력하고 있습니다!
RussellStewart

끝난. 처음으로 짧은 링크 전용 게시물을 작성하고 싶었습니다. 이제는 더 잘 알고 있습니다.
RussellStewart

1
오래 전에 (sshrc 이전) simil sshrc를 작성했습니다 : github.com/fsquillace/pearl-ssh 그것은 더 효율적이고 작으며 xxd 의존성이 없습니다.
user967489

1

이전에 서버를 공격 한 적이 없다면 ~ / .ssh / known_hosts에 항목이 없습니다.

"ssh-keygen -F"로 알려진 호스트를 검색 할 수 있지만, ssh-keygen이 누락 된 경우 false를 반환하지 않으므로 해당 출력 (grep)을 테스트해야합니다. 다른 식별자 (IP 주소, 호스트 이름, FQDN)로 호스트를 참조하면 각각 개별 인스턴스로 취급됩니다.

처음 로그인 할 때 사용자 환경을 해당 호스트로 전송하는 ssh 용 래퍼를 작성할 수 있습니다.

ssh-newenv () {만약! ssh-keygen -F $ 1 | grep -q "^ # host $ 1 found :"; 그런 다음 rsync ~ / .bashrc ~ / .bash_profile ~ / .bash_logout $ 1 :.; fi; ssh $ 1; }

이를보다 강력하게하려면 원격 호스트에 알려진 환경 파일, 해시 또는 기타 마커가 있는지 확인할 수 있습니다.


0

세션 당 .bashrc가 있는지 모르겠습니다.

또 다른 해결책은 자주 사용하는 모든 구성을 새 홈 폴더로 전송하는 작은 스크립트를 작성하는 것입니다.

어쩌면 경로가있는 모든 구성으로 폴더를 만들고 scp로 전송하십시오.

처럼

/home/foobar/configs/.bashrc
/home/foobar/configs/.foo/bar.conf
...

그런 다음

scp -r /home/foobar/configs/* foo@example.com:/home/foo/

시간이 절약됩니다.


0

나는 ssh가 당신과 관련이 없다는 것을 감안할 때 그것이 가능하다고 생각하지 않습니다 .bashrc. ssh가 아닌 해당 파일을로드하는 쉘입니다.

몇 가지 아이디어 :

  1. 처음 로그인 할 때 원격 홈 디렉토리를 설정하십시오.
  2. NFS를 사용하여 모든 서버에 .bashrc가 포함 된 홈 디렉토리를 마운트하십시오. 이렇게하면 어디에서나 동일한 설정을 사용할 수 있습니다.
  3. 원격 서버로 전송 된 일부 환경 변수만으로도 문제가 없으면 SendEnv옵션을 확인해야합니다 (자세한 내용은 ssh_config맨 페이지 참조). 서버가 올바르게 설정되어 있으면 (예 : AcceptEnvsshd_config에 적합 ) SendEnv환경 변수를 원격 호스트에 복사 하는 데 사용할 수 있습니다 .
  4. 이것이 작동하는지 모르겠지만 원격 호스트에 연결하기 전에 ProxyCommand설정을 잘못 사용하여 ssh_config매뉴얼 .bashrc또는 다른 파일 을 보낼 수 있습니다 . 그래도 약간의 테스트가 필요합니다. 또한 이것이 scp를 방해 할 수 있도록 준비하십시오.

0

https://github.com/fsquillace/pearl-ssh 가 필요한 것을 수행한다고 생각 합니다.

sshrc가 태어나 기 전에 오래 전에 작성했으며 sshrc에 비해 더 많은 이점이 있습니다.

  • 두 호스트 모두에 대해 xxd에 대한 종속성이 필요하지 않습니다 (원격 호스트에서 사용할 수 없음).
  • Pearl-ssh는보다 효율적인 인코딩 알고리즘을 사용합니다.
  • ~ 20 줄의 코드입니다 (정말 이해하기 쉽습니다!)

예를 들어 :

$> echo "alias q=exit" > ~/.config/pearl/sshrc
$> ssh_pearl myuser@myserver.com
myserver.com $> q
exit
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.