SSH를 통해 원격 서버에 로그인할 때 디렉터리를 변경하고 bash 옵션을 설정하는 방법

SSH를 통해 원격 서버에 로그인할 때 디렉터리를 변경하고 bash 옵션을 설정하는 방법

나는 종종 원격 호스트에 SSH로 연결해야 하고, bash 옵션을 사용하는 것을 좋아하며 set -o vi, 일반적으로 cd특정 디렉토리에 로그인해야 합니다. 이러한 호스트는 임시 호스트이므로(주기적으로 생성 및 삭제됨) 해당 호스트에 로그인하여 .bash_profile/ 에 저장할 수 없습니다 .bashrc. 그래서 원격 서버에 접속할 때마다 같은 명령어를 입력하지 않아도 되도록 SSH를 통해 접속할 때 어떻게 해야 하는지 알아보고 있습니다. 나는 이것을 달성하기 위해 여러 가지 방법을 시도했지만 아무것도 작동하지 않는 것 같습니다. 누구든지 이 명령을 올바르게 실행하도록 도와줄 수 있나요? 한마디로 내가 하고 싶은 일은 이것이다.

  1. cd특정 디렉토리로
  2. 배시 옵션 설정set -o vi

내가 시도하는 방법은 다음과 같습니다.

ssh [email protected] -t "cd /data; exec bash --login -c \"set -o vi\""

이것이 작동하는 것 같지만 set -o vi명령이 실행되면 다음과 같은 메시지와 함께 세션 연결이 끊어지기 때문에 SSH 세션이 종료됩니다.

Remotehost.com에 대한 공유 연결이 닫혔습니다.

이러한 명령을 실행한 후에 세션을 열어두는 방법이 있습니까, 아니면 원하는 것을 달성할 수 있는 다른 방법이 있습니까?

답변1

일부 옵션:

ssh -t [email protected] 'cd /data && exec bash --login -o vi'

( POSIX 유틸리티의 표준 옵션 으로 ksh/ zsh...를 포함한 모든 POSIX 유사 쉘에서 작동하며 표준 옵션 중 하나입니다. 명령줄은 Bourne, csh , rc, fish이므로 루트 사용자의 로그인 쉘이 무엇이든 관계없이 작동해야 합니다)dash-oshvi

또는:

SSH-t[이메일 보호됨]'cd /data && exec env SHELLOPTS=vi bash --login'

사실, 두 번째 것을 사용하고 싶지는 않습니다. 이는 $SHELLOPTS변수가 환경에 있고 모든 bash호출에 영향을 미친다는 것을 의미합니다(비대화형 호출은 대화형 셸에서 호출을 상속하므로 모든 종류의 문제가 발생함).

또한 bash두 가지 옵션 세트가 있습니다. 하나는 -o/settings 를 사용 $SHELLOPTS하고 다른 하나는 -O/settings 를 사용합니다 $BASHOPTS.

답변2

두 가지 명령을 수행하십시오.

  1. 원격 호스트에서 실행할 명령을 파일에 담는다 .bashrc.tmp.
  2. $ scp .bashrc.tmp [email protected]:
  3. $ ssh <options> [email protected] "bash --login --rcfile ${HOME}/.bashrc.tmp"

이렇게 하면 원본을 백업할 필요조차 없습니다 .bashrc.

답변3

호스트의 한 폴더에서 다른 폴더로 쉽게 이동하려면 apparix를 설치하고 점프해야 하는 여러 위치에 책갈피를 설정한 다음 to folderXapparix에서 사용할 수 있습니다.https://micans.org/apparix/man/apparix.html

답변4

공유된 사용자 ID로 원격 시스템을 사용하고 있으므로 시작 파일을 편집하면 다른 사용자에게도 영향을 미치므로 편집하고 싶지 않습니다. 그러나 여기 귀하의 게시물은 vi제가 원하는 옵션을 설정하는 방법을 보여주었습니다 . ~/.ssh/config파일에 넣은 내용 이에요

Host testsystem
User tester
RequestTTY yes
RemoteCommand exec /bin/bash --login -o vi

매우 간단합니다. "cd" 부분이 무엇을 원하는지 잘 모르겠습니다.

관련 정보