반응형

Client OS: Ubuntu Desktop 14.04.1 LTS (amd64)

Host OS: Ubuntu Server 14.04 LTS (amd64)


우분투 데스크탑에서 원격 컴퓨터에 SSH로 로그인하면서 X윈도우를 통한 앱을 쓰려면 서버와 클라이언트 양쪽 모두 X11 forwarding 옵션을 켜야 한다.  서버 쪽에서는 /etc/ssh/sshd_config 파일에서 X11Forwarding yes 항목이 주석 없이 적혀 있어야 한다. 클라이언트 쪽에서는 간단하게 "-X" 옵션만 추가하면 되지만, 이 때 에러 메세지가 발생하는 경우가 있는데, 그 중에 다음과 같이 .Xauthority 파일에 접근을 하지 못하는 에러가 발생할 때가 있다.


/usr/bin/xauth: /home/[로그인 사용자 계정]/.Xauthority not writable, changes will be ignored



일단 위와 같은 에러 메세지가 뜨더라도 SSH 로그인은 되기 때문에, /home/[로그인 사용자 계정]/.Xauthority 파일을 확인해 보니 권한이 600 (루트만 읽고 수정가능)으로 되어 있었다. 그래서 일단 이 파일의 권한을 모든 사용자가 읽고 쓸 수 있게 바꾸어 보았다.

$ sudo chmod 666 /home/[로그인 사용자 계정]/.Xauthority



다시 ssh -X로 로그인해 보니 위의 에러는 사라졌지만, 로그인 과정에서 잠시 멈춰 있다가 아래와 같은 에러 메세지를 보여 주면서 어쨌든 기본 SSH로 로그인은 되었다. 여전히 X윈도우 관련 어플리케이션은 실행되지 않았다.

/usr/bin/xauth: timeout in locking authority file /home/[로그인 사용자 계정]/.Xauthority



이 경우에는 lock에 관여하는 .Xauthority-c, .Xauthority-l 파일들을 삭제하면 된다.


$ sudo rm -fr /home/[로그인 사용자 계정]]/.Xauthority-*


SSH 세션에서 빠져나온 후, 다시 ssh -X를 이용하여 로그인해 보면 에러 없이 로그인이 되고, X윈도우 앱들도 정상적으로 실행됨을 확인할 수 있다.



반응형
블로그 이미지

Bryan_

,
반응형

Tested device: Raspberry Pi 2 (model B)

OpenWrt version: 15.05 (Chaos Calmer)


라즈베리파이에서 이더넷 포트를 외부 인터넷 접속용 wan 인터페이스로 변경해서 연동했더니, LuCI 웹 인터페이스에 접근하지 못할 뿐만 아니라 SSH 접속도 막히게 되었다. 즉, 외부 인터넷에서 SSH(포트 22)와 LuCI(포트 80) 접속이 기본적으로 막혀 있다. 이것은 비단 라즈베리파이 뿐만 아니라 모든 OpenWRT 라우터에 해당된다.

애초에 이더넷 포트를 wan으로 연결하기 전에 LuCI의 System > Administration 페이지에서 "Allow  remote hosts to connect to local SSH forwarded ports" 옵션에 체크를 했지만 기대하던 대로 작동하지 않았다.


이 경우는 /etc/config/firewall 파일을 수정해서 쉽게 해결할 수 있다.


/etc/config/firewall 파일에 아래 내용을 추가해 준다.

# for SSH access

config rule

option src 'wan'

option proto tcp

option dest_port '22'

option target 'ACCEPT'


# for LuCI webpage access

config rule

option src 'wan'

option proto tcp

option dest_port '80'

option target 'ACCEPT'


만약 SSH와 웹 인터페이스의 포트 번호가 다르게 설정되어 있다면 22, 80 대신 해당하는 포트번호를 입력한다.


파일을 저장하고 나서 아래와 같이 firewall을 재시작하고 나면 외부 접속이 가능해진다.

root@OpenWrt:~# /etc/init.d/firewall restart




반응형
블로그 이미지

Bryan_

,
반응형

OpenWRT version: 14.07 (Barrier Breaker)

Tested device: Buffalo WZR-600DHP

외부 머신: Ubuntu 12.04 (64-bit)


*목적: 인터넷에 접속할 수 있는 OpenWRT 라우터에서 특정 리눅스 머신에 SSH 또는 SCP를 사용할 때, 비밀번호 입력 절차 없이 자동으로 인증되도록 하고 싶다.


일반적으로 리눅스에서 쓰는 잘 알려진 방법을 활용하면 (openssh를 쓴다는 가정 하에):

1. OpenWRT 기기에서 ssh-keygen 도구를 이용하여 RSA key를 생성하고,

2. OpenWRT에는 private key 파일을 보관하고,

3. 접속할 원격 머신에는 public key 파일을 $HOME/.ssh/authorized_keys 파일에 추가한다.

(참고: OpenTutorials에 있는 egoing님의 글: SSH Key - 비밀번호 없이 로그인)


그런데 위와 같이 하고 아래와 같이 RSA key를 이용한 로그인을 시도하면 에러가 뜬다.

root@OpenWrt:~# ssh -i /root/.ssh/id_rsa [원격 머신 계정 아이디]@[원격 머신 주소]

ssh: Exited: String too long

root@OpenWrt:~# 


이 경우 일반적인 ssh-keygen 대신 dropbearkey를 활용해야 한다.

(참고: https://forum.openwrt.org/viewtopic.php?id=14148)


root@OpenWrt:~# dropbearkey -t rsa -f /root/.ssh/id_rsa

Generating key, this may take a while...

Public key portion is:

ssh-rsa AAAAB3NzaC1yc2EAAADAQAB...(중략) root@OpenWrt

Fingerprint: md5 7e:aa:9b:...(생략)


위의 화면에서 "ssh-rsa ..."로 시작하는 내용은 public key이므로 복사해서 따로 파일로 저장해 두자. (예: id_rsa.pub) dropbearkey에서는 ssh-keygen과는 달리 화면상에 출력만 하고 별도로 .pub 파일로 저장하지 않는다. 그리고 이 내용을 원격 머신의 $HOME/.ssh/authorized_keys 파일에 추가해야 한다.


참고로 dropbearkey를 생성하기 전에 이미 같은 위치에 id_rsa 파일이 있으면 덮어쓰기가 안되므로, 새로 만들 파일 이름을 다르게 하거나, 기존의 id_rsa 파일을 지우도록 하자. (어차피 OpenWRT 기기에서 쓸 수 없으니까 지워도 무방함. 정 필요하면 나중에 ssh-keygen으로 다시 만들면 된다.)


이제 dropbearkey로 새로 만든 private key를 사용해서 비밀번호 입력 없이 SSH, SCP에 접속할 수 있다.


root@OpenWrt:~# scp -i /root/.ssh/id_rsa [보낼 파일] [원격 머신 계정 아이디]@[원격 머신 주소]:[파일 받을 경로]



반응형
블로그 이미지

Bryan_

,