반응형

출처 : 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://www.linuxquestions.org/questions/linux-newbie-8/ssh-login-without-password-not-working-4175561052/

비밀번호가 없는 SSH 로그인이 잘 안됩니다

안녕하세요.

여기에 첫번째 위협입니다만 제가 규칙을 어긴거라면 친절하게 대해주세요... :)

저는 NAS 장치가 있고 2개 장치 모두에 root로 접근합니다.

저는 그들 사이에 rsync를 하고 싶습니다.

rsync 명령은 잘 됩니다만... cron job으로 자동화가 불가능 하도록 만드는 password 구문이 프롬프트로 나타납니다.

저는 이미 rsa key를 생성했고 다른 NAS로 인증 키를 얻었지만, 그 이후에도 password 구문이 있습니다.

다음을 시도하였습니다.

"cat /root/.ssh/id_rsa.pub | ssh root@destinationip 'cat >> .ssh/authorized_keys'

다음처럼 결과가 나왔습니다.

"The authenticity of host 'dest ip (destip)' can't be established.
RSA key fingerprint is 35:60:b9:53:a4:08:fb:1a:be:7a:7d:b5:4f:ee:cc:2c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'destip' (RSA) to the list of known hosts.
root@destip's password:

누군가 범인이 어디에 있는지 힌트를 줄 수 있습니까?

1개의 답변

부적절한 권한이 주로 이에 대한 원인입니다.

chmod 750 ~
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

대상 머신에서 위의 권한 작업을 해야합니다.

반응형
반응형

출처 : https://stackoverflow.com/questions/4936807/how-to-do-ssh-with-a-timeout-in-a-script

script에서 ssh로 timeout을 주는 방법?

저는 원격 호스트로 비밀번호 없는 SSH로 접속하는 script를 실행하고 있습니다. 만약 원격호스트가 실행하는데 무한의 시간이 걸린다면 저는 timeout을 설정하여 그 ssh 세션을 빠져나와 저의 sh script에서 다음 행을 진행하고 싶습니다.

timeout을 어떻게 설정할 수 있나요?


6개의 답변 중 1개의 답변

ssh -o ConnectTimeout=10  <hostName>

10은 초로 된 시간을 의미합니다. 이 timeout은 연셜 생성에만 적용됩니다.

반응형
반응형

출처

비밀 SSH 키로부터 공개 SSH 키를 생성하기

잃어버린 공개 키나 웹서비스는 SSH키를 생성하지만 당신에게 공개키를 제공하지는 않습니다. 이 때 지금할 것은 무엇일까요? 이 상황에 대한 해결책이 있습니다.

SSH key로부터 SSH 비밀번호 없이 로그인을 설정하기 위해 당신은 공개키가 필요합니다. 그러나 공개키를 잃어버려도 비밀키를 가지고 있다면 그 키를 재생성하는 방법이 있습니다.

잃어버린 공개키로, 다음 명령은 이 SSH 키로 공개키가 없다는 것을 보여줍니다.

$ ssh-keygen -l -f ~/.ssh/id_rsa
test is not a public key file.

-l 옵션은 공개키의 지문(fingerprint)을 알려주며 -f 옵션은 지문(fingerprint)을 나열하는 키의 파일을 지정합니다.

비밀키로부터 잃어버린 공개키를 다시 생성하기 위해 다음 명령어는 -f 옵션으로 제공된 비밀키에 대한 공개키를 생성할 것입니다.

$ ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
Enter passphrase:

-y 옵션은 비밀 SSH 키를 읽어 SSH 공개키를 stdout으로 출력할 것입니다. 공개키 부분은 비밀 키와 같은 이름의 파일이지만 확장자는 .pub 파일로 redirect됩니다. 키가 비밀번호 set이면 그 비밀번호는 공개키를 생성하는데 필요합니다.

생성된 공개키의 세부사항을 확인하려면 다음 명령어를 실행합니다.

$ ssh-keygen -l -f ~/.ssh/id_rsa
4096 d6:7b:c7:7a:4f:3c:4d:29:54:62:5f:2c:58:b2:cb:86 ~/.ssh/id_rsa (RSA)

이 명령어의 출력은 첫 번째 열에 키의 크기를 보여주며, 두 번째 열에는 지문(fingerprint)이 다음 열에는 파일명, type은 괄호로 둘러쌓여 보입니다. 위의 예제에서는 4096 비트의 RSA key입니다.

반응형
반응형

출처

https://serverfault.com/questions/59140/how-do-diff-over-ssh


ssh로 원격 diff 하는 방법

ssh로 접속만이 가능한 원격 머신에 있는 파일이나 폴더를 diff를 어떻게 할 수 있을까요?

------

14개의 답변 중 1 개의 답변만 추려냄.

Bash의 process substitution으로 당신은 원격 diff를 하실 수 있습니다.

diff foo <(ssh myServer 'cat foo')

또는 둘다 원격 서버라면 다음처럼 가능합니다.

diff <(ssh myServer1 'cat foo') <(ssh myServer2 'cat foo')


반응형
반응형
출처 

http://www.linuxproblem.org/art_9.html

비밀번호 없이 SSH 로그인

목표

당신이 리눅스를 사용하고 당신의 작업을 자동화하기 위해 OpenSSH를 사용하기 원합니다. 그래서 당신은 host A / 사용자 a에서 호스트 B / 사용자 b로 자동 로그인이 필요합니다. 당신은 쉘 스크립트(shell script)로 ssh를 호출하고 싶기 때문에 비밀번호를 입력하길 원하지 않을것입니다.

방법

우선 호스트 A에서 a 사용자로 로그인하여 인증 키 쌍을 생성합니다. passphrase는 입력하지 않습니다.

a@A:~> ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/a/.ssh/id_rsa):
Created directory '/home/a/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/a/.ssh/id_rsa.
Your public key has been saved in /home/a/.ssh/id_rsa.pub.
The key fingerprint is:
3e:4f:05:79:3a:9f:96:7c:3b:ad:e9:58:37:bc:37:e4 a@A


이제 호스트 B에서 b 사용자로 ssh 프로그램을 사용하여 ~/.ssh 디렉터리를 만듭니다. (디렉터리가 이미 있을지 모르지만 괜찮습니다.)

a@A:~> ssh b@B mkdir -p .ssh
b@B's password:


마지막으로 a 사용자의 새로운 공개키를 b@B:.ssh/authorized_keys에 추가하고 마지막으로 b 사용자의 비밀번호를 입력합니다.

a@A:~> cat .ssh/id_rsa.pub | ssh b@B 'cat >> .ssh/authorized_keys'
b@B's password:


이제부터 비밀번호 없이 호스트 B의 b 사용자로 로그인 할 수 있습니다.

a@A:~> ssh b@B


독자중 한명으로부터 당신의 SSH 버젼에 따라 당신은 다음 작업을 해야할 수 있습니다. 

  • .ssh/authorized_keys2에 public key를 넣습니다.
  • .ssh 디렉터리 권한을 700으로 변경(chmod)합니다.
  • .ssh/authorized_keys2의 권한을 640으로 변경합니다.

다음 출처 : https://opentutorials.org/module/432/3742

역자 추가내용 : 호스트 B의 b 사용자는 .ssh 디렉터리에 다음 권한처럼 설정이 필요합니다.

1
2
3
4
5
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub 
chmod 644 ~/.ssh/authorized_keys
chmod 644 ~/.ssh/known_hosts


반응형
반응형

출처 : http://stackoverflow.com/questions/305035/how-to-use-ssh-to-run-shell-script-on-a-remote-machine

ssh를 사용하여 원격 컴퓨터의 shell script를 실행하는 방법?

저는 원격 컴퓨터에서 로컬 shell script(윈도우즈/리눅스)를 실행해야 합니다.

A 컴퓨터와 B컴퓨터 모두에서 설정된 ssh가 있습니다. 저의 스크립트는 B컴퓨터에서 수행할 내용이 A컴퓨터에 있습니다.

로컬과 원격 컴퓨터는 윈도우즈나 유닉스 기반의 시스템일 수 있습니다.

plink/ssh를 사용하여 이를 실행할 수 있는 방법이 있을까요?


20개의 답변 중 1개의 답변

만약 A 컴퓨터가 Windows box라면 -m 파라미터와 함께 Plink(PuTTY의 일부)를 사용하실 수 있고 원격 서버에 로컬(내 컴퓨터의) 스크립트를 실행할 것입니다.

plink root@MachineB -m local_script.sh

만약 A컴퓨터가 유닉스를 기반으로한 시스템이면 다음처럼 사용할 수 있습니다.

ssh root@MachineB 'bash -s' < local_script.sh

이를 수행하기 위해 스크립트를 원격 컴퓨터로 복사하실 필요가 없습니다.


(번역과 관련없는) 추가내용

ssh 뿐만이 아니라 rsh도 똑같은 방법으로 실행이 가능합니다.

ssh root@MachineB 'bash -s' < local_script.sh

ssh 계정명@원격호스트(IP) 수행할명령어 < 로컬_스크립트.sh

만약 원격 컴퓨터의 프로그램이 수행이 되지 않는다면

로컬_스크립트.sh에서 export LD_LIBRARY_PATH를 원격컴퓨터에 맞게 설정하셔야 됩니다.

예) export LD_LIBRARY_PATH=/usr/lib:/usr/local/lib

반응형

'리눅스 shell' 카테고리의 다른 글

expect  (0) 2015.08.09
리눅스 쉘에서 '>/dev/null 2>&1'의 뜻이 무엇인가요?  (2) 2015.07.10
rsync  (0) 2015.02.17
왜 쉘 명령어가 \(백슬래시)로 시작하나요?  (0) 2014.07.08
fg  (0) 2011.08.03

+ Recent posts