반응형

출처 : https://askubuntu.com/questions/810098/why-doesnt-my-alias-work-over-ssh

alias가 ssh에서 왜 작동하지 않을까요?

저는 .bashrc에서 다음과 같이 alias를 가지고 있습니다.

alias l.='ls -d .* --color=auto'

이는 매우 유용합니다 :) 하지만 ssh를 통해 작동하지 않습니다.

$ ssh localhost l.
bash: l.: command not found

왜 그럴까요?


1개의 답변

다음을 시도해 보세요.

ssh localhost -t bash -lci l.
  • alias는 당신의 로컬 컴퓨터가 아닌 원격 서버에서 ~/.bashrc에 있어야 됩니다.
  • -i 옵션은 bash에게 interactive 쉘이라고 알려줍니다. alias는 interactive 쉘에서만 가능합니다.
  • -t 옵션은 ssh에 슈도-터미널(pseudo-tty)을 할당하도록 합니다. 이것이 없으면 bash는 interactive 모드를 시작할 때 주의(warning) 메세지를 방출합니다. 이는 ls에 칼라를 가능하게 합니다. 이것이 없으면 당신은 --color=always를 사용해야 합니다. man ls를 확인해주세요.
  • 역자추가 : -l 옵션은 bash가 로그인 쉘로 호출된 것처럼 작동하게 합니다.
  • interactive flag를 설정하지 않고 alias를 가능하게 하는 다른 방법은 shopt -s expand_aliases를 사용하는 것입니다. 다음처럼 시도할 수 있습니다.
ssh localhost 'bash -c "shopt -s expand_aliases; l."'

하지만

  • .bashrc는 쉘 source이 interactive인 경우에만 alias를 정의할 수 있습니다. 이 예시에서 쉘은 interactive 형이 아닙니다.
  • 만약 같은 줄에 alias를 정의하려는 경우 이 항목을 참조하세요.
반응형
반응형

출처 : https://stackoverflow.com/questions/14392432/checking-a-file-existence-on-a-remote-ssh-server-using-python

Python을 사용하여 원격 SSH 서버에서 파일 존재 확인

A와 B 2개의 서버가 있습니다. A 서버에서 이미지 파일을 B 서버로 보낸다고 가정합니다. 하지만 A 서버에서 파일을 보내기 전에 B 서버에 비슷한 파일이 있는지 확인하고 싶습니다. 저는 os.path.exists()를 사용하였지만 작동하지 않았습니다.

print os.path.exists('ubuntu@serverB.com:b.jpeg')

결과는 B 서버에 존재하는 파일이 있어도 false를 리턴합니다. 저는 구문 오류인지 확실하지 않으며 이 문제를 해결하기 위한 더 좋은 방법이 있을까요? 감사합니다.


1개의 답변

os.path 함수는 같은 컴퓨터의 파일에서만 작동합니다. 이는 경로(paths)에서만 작동하며, ubuntu@serverB.com:b.jpeg은 경로가 아닙니다.

이를 이루기 위해서, 원격으로 스크립트를 실행해야 합니다. 다음처럼 하면 작동할 것입니다.

def exists_remote(host, path):
    """SSH로 접근가능한 호스트의 경로에 파일이 있는지 검사합니다."""
    status = subprocess.call(
        ['ssh', host, 'test -f {}'.format(pipes.quote(path))])
    if status == 0:
        return True
    if status == 1:
        return False
    raise Exception('SSH failed')

다른 서버에 파일이 있는지 알려면

if exists_remote('ubuntu@serverB.com', 'b.jpeg'):
    # 원격 파일이 있으면...

이 방법은 100ms 이상 걸릴수도 있고 매우 느릴 수 있습니다.

반응형
반응형

출처 : https://stackoverflow.com/questions/12845206/check-if-file-exists-on-remote-host-with-ssh

ssh로 원격 호스트의 파일이 존재하는 지 확인

저는 원격 호스트에서 특정 파일이 있는지 확인하고 싶습니다. 그래서 다음을 시도했습니다.

$ if [ ssh reg@localhost -p 19999 -e /home/reg/Dropbox/New_semiosNET/Research_and_Development/Puffer_and_Traps/Repeaters_Network/UBC_LOGS/log1349544129.tar.bz2 ] then echo "okidoke"; else "not okay!" fi
-sh: syntax error: unexpected "else" (expecting "then") 

13개의 답변 중 1 개의 답변

여러 답변에 근거하여 다음처럼 짧게 사용하는 방법이 있습니다.

ssh -q $HOST [[ -f $FILE_PATH ]] && echo "File exists" || echo "File does not exist";

-q는 quiet 모드입니다. 이는 warning과 메세지를 덜 나오게 할 것입니다.

@Mat님이 언급했듯이 이처럼 테스트하는 것의 이득은 -f-nt, -d, -s... 등과 같은 다른 테스트 연산자로 쉽게 바꿀 수 있기 때문에 좋습니다.

테스트 연산자: http://tldp.org/LDP/abs/html/fto.html

반응형

+ Recent posts