SSH 구성의 변수 사용자 이름

SSH 구성의 변수 사용자 이름

변수를 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 환경 변수

SSH 연결에 환경 변수 전달

SSH - 각 연결마다 환경 변수 설정

SSH를 사용할 때 세션 간에 변경되는 서버의 환경 변수를 어떻게 설정합니까?

환경 변수가 클라이언트에 의해 해석되지 않는 다른 이유는 다음과 같습니다.

  1. 환경 변수입니다set correctly
  2. 환경 변수입니다exported
  3. 환경 변수가 나열되어 ssh_config있는지 확인하십시오 .SendEnvSendEnv ENV_VARIABLE
  4. -t 옵션을 사용해 보세요ssh -t ...
  5. ~/.ssh/environment클라이언트에서 파일을 생성하고 서버에서 ENV_VARIABLE=VALUE 파일을 yes로 설정합니다.PermitUserEnvironmentsshd_config

SSH 세션에서 사용자 환경 변수를 사용하려고 시도했지만 해석되지 않은 경우 SSH 클라이언트가 환경 변수를 전달하도록 구성되지 않았을 수 있습니다. 환경 변수를 전달하려면 호스트에 연결할 때 -t 옵션을 사용하십시오. 이 옵션은 원격 호스트에 의사 tty를 할당하여 환경 변수가 전달되도록 SSH에 지시합니다.

SSH 클라이언트 구성이나 클라이언트 문서를 확인하고 싶을 수도 있습니다.

또는

사용법 SendEnvAcceptEnv지침

이것을 당신에게 추가하십시오/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 사용자가 필요하지 않습니다.

관련 정보