
변수를 SSH 구성 파일로 구문 분석하는 방법을 찾고 있습니다. 현재 배포 전에 값을 바꾸는 스크립트가 있습니다. 차라리 이 단계를 없애고 싶습니다. 나는 성공하지 못한 채 매뉴얼과 릴리스 노트를 여러 번 읽었으며 이것이 가능한지 현재 확실하지 않습니다.
나는 다음과 같이 하는 것이 바람직하다:
variable_user = boxuser
Host thisbox
Hostname thisbox
User $variable_user
이상적으로는 다른 모든 것이 표준화된 상태로 유지될 수 있도록 구성을 사용자 변수에 포함하고 싶습니다.
내가 너무 많은 것을 요구하고 있는 걸까?
편집하다:
구성이 $USER 전달을 해석하지 않습니다.
Host thisbox
Hostname thisbox
User $USER
결과:
$ ssh thisbox
$USER@thisbox's password:
%u도 마찬가지입니다
답변1
사용자 사용 $USER
환경 설정
Host MYHOST
Hostname MYHOST
User $USER
자세한 내용은 여기를 확인하세요.SSH Environment Variables
SSH를 사용할 때 세션 간에 변경되는 서버의 환경 변수를 어떻게 설정합니까?
환경 변수가 클라이언트에 의해 해석되지 않는 다른 이유는 다음과 같습니다.
- 환경 변수입니다
set correctly
- 환경 변수입니다
exported
- 환경 변수가 나열되어
ssh_config
있는지 확인하십시오 .SendEnv
SendEnv ENV_VARIABLE
- -t 옵션을 사용해 보세요
ssh -t ...
~/.ssh/environment
클라이언트에서 파일을 생성하고 서버에서ENV_VARIABLE=VALUE
파일을 yes로 설정합니다.PermitUserEnvironment
sshd_config
SSH 세션에서 사용자 환경 변수를 사용하려고 시도했지만 해석되지 않은 경우 SSH 클라이언트가 환경 변수를 전달하도록 구성되지 않았을 수 있습니다. 환경 변수를 전달하려면 호스트에 연결할 때 -t 옵션을 사용하십시오. 이 옵션은 원격 호스트에 의사 tty를 할당하여 환경 변수가 전달되도록 SSH에 지시합니다.
SSH 클라이언트 구성이나 클라이언트 문서를 확인하고 싶을 수도 있습니다.
또는
사용법 SendEnv
및 AcceptEnv
지침
이것을 당신에게 추가하십시오/etc/ssh/sshd_config
AcceptEnv SSH_USER
sshd_config(5) — Linux 매뉴얼 페이지 환경 수락 |
또는
환경을 사용 $SSH_USER
하여 목적을 설정하세요. 어쩌면 모든 시스템에서 작동하지 않을 수도 있습니다.
Host MYHOST
Hostname MYHOST
User $SSH_USER
ssh 명령을 실행하면 SSH_USER 환경 변수의 값을 읽어 $SSH_USER를 대체합니다.
새 터미널 세션을 열 때마다 SSH_USER 환경 변수를 설정하거나 이를 터미널 세션에 추가하여 ~/.bashrc
지속되도록 해야 합니다.
Search in the Bash CookBook for $SSH_USER
, 리뷰 장에서 저는 하나만 언급했습니다.
다음 장을 확인하세요.
10.3 스크립트에서 구성 파일 사용
15.11 다른 머신에서 입력 받기
10.3 스크립트에서 구성 파일을 사용할 때 발생하는 문제 하나 이상의 스크립트에 대해 하나 이상의 외부 구성 파일을 사용하려고 합니다. 해결 방법 일부 특수 구성 파일 형식을 구문 분석하기 위해 많은 코드를 작성할 수 있습니다. 자신에게 호의를 베풀고 이런 일을하지 마십시오. 구성 파일을 쉘 스크립트로 만들고 레시피 10.2의 솔루션을 사용하세요. 토론 이것은 파일을 가져오는 특정 응용 프로그램 중 하나일 뿐입니다. 그러나 bash의 법적 구문에 대한 모든 구성 요구 사항을 줄이는 방법에 대해 조금 생각해 볼 수도 있다는 점은 주목할 가치가 있습니다. 특히 부울 플래그와 선택적 변수를 사용할 수 있습니다(5장 및 15.11절 참조).
# In config file
VERBOSE=0 # 0 or '' for off, 1 for on
SSH_USER='jbagadonutz@' # Note trailing @, set to '' to use the current user
# In script
[ "$VERBOSE" ] || echo "Verbose msg from $0 goes to STDERR" >&2
[...]
ssh $SSH_USER$REMOTE_HOST [...]
물론, 우연히 올바른 프로필을 얻는 것은 사용자에게 달려 있을 수 있으므로 사용자에게 댓글을 읽고 뒤에 @를 추가하도록 요구하는 대신:
# If $SSH_USER is set and doesn't have a trailing @ add it:
[ -n "$SSH_USER" -a "$SSH_USER" = "${SSH_USER%@}" ] && SSH_USER="$SSH_USER@"
아니면 그냥 사용하세요:
ssh ${SSH_USER:+${SSH_USER}@}${REMOTE_HOST} [...]
동일한 대체를 수행하십시오. bash 변수 연산자 :+는 다음을 수행합니다. $SSH_USER에 값이 있으면 해당 값을 :+의 오른쪽에 반환합니다(이 경우 변수 자체에 추가 @를 지정했습니다). 설정되지 않거나 비어 있으면 아무것도 반환되지 않습니다. 참조 • 5장 • 섹션 10.2 “인클루드 및 소스 코드를 통해 코드 재사용” • 섹션 15.11 “다른 시스템에서 입력 받기”
토론 여기서는 몇 가지 흥미로운 작업을 수행했습니다. 먼저 $SSH_USER 및 $SSH_ID의 작동 방식을 살펴보세요. 값이 있으면 효과가 있지만 비어 있으면 빈 세트에 삽입되고 무시됩니다. 이를 통해 코드에서 값을 추상화할 수 있으며, 이는 해당 값을 구성 파일에 넣거나 코드를 함수에 넣거나 둘 다에 넣는 데 도움이 됩니다.
답변2
사용자 정의 bash/ssh 환경이 없으면 bash가 ssh 구성 파일을 해석하지 않기 때문에 $USER가 모든 시스템이나 버전에서 작동하지 않습니다.
.bashrc 파일을 사용하여 이 문제를 해결하거나 custom_ssh 파일을 만들고, .bashrc 파일을 통해 가져오고 별칭이나 변수를 만들 수 있습니다.
~/.bashrc
# add to the end of file
source custom_ssh_config
별칭을 사용하는 custom_ssh_config 파일
#!/bin/bash
# USE ALIAS
alias ssh_user_1="ssh ${USER}@HOSTNAME"
user2="myuser2"
alias ssh_user_2="ssh -l ${user2} thisbox"
실행:
ssh_user_1
또는ssh_user_2
custom_ssh_config 파일은 변수를 사용합니다.
#!/bin/bash
# USE VARIABLE
ssh_user_1="${USER}"
user2="myuser2"
ssh_user_2="${user2}"
달리기:
ssh -l $ssh_user_1 thisbox
또는ssh -l $ssh_user_2 thisbox
$USER의 경우:
ssh -l $USER thisbox
SSH 구성 파일에는 $USER 사용자가 필요하지 않습니다.