동일한 환경의 서버에 ssh 접속하는데, 5초가량 늦는다. (차이점은 동일버전의 서버용/데스크탑용 의 차이)

ssh server -vvv 로 접속해보면

debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug3: send packet: type 50

위 부분에서 5초가량 늦게 접속이 된다.(다른 서버는 거의 바로 접속)

구글링을 해보니, avahi-daemon 이라는 용의자가 보인다.

service avahi-daemon stop
or
systemctl stop avahi-daemon

정지하고 접속하니 해결.

여러 서버/데스크탑을 사용해봤지만, 이런 상황은 처음 겪어본다.
우분투 12.04 지원까지 끊긴 서버라 그런가? 확인해보니 최근 배포판은 그런 현상은 없었다.

 

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

ubuntu 22.04 로 업그레이드 후에 기존 autossh 로 설정해놓은 터널링이 안된다.
그래서 확인해보니. autossh 가 실패되었다.

더 확인해보니 ssh 로 접속이 안되고, 암호를 물어본다.

ssh -vvv 로 접속해서 메시지를 확인해봤다.

다음과 같은 메시지가 보인다.

ssh send_pubkey_test no mutual signature algorithm
or
sign_and_send_pubkey: no mutual signature supported

검색해 보니, 보안관련 이슈인듯 싶다.

일단 해결방안은 아래 링크로

https://transang.me/ssh-handshake-is-rejected-with-no-mutual-signature-algorithm-error/

https://confluence.atlassian.com/bitbucketserverkb/ssh-rsa-key-rejected-with-message-no-mutual-signature-algorithm-1026057701.html

위 방법중 임시방편? 으로 일단 해결해본다.

.ssh/config 에 접속설정을 추가한다.

Host server-nickname
        hostname servername.com
        User root
        Port 2222
        PubkeyAcceptedKeyTypes +ssh-rsa

추천하는 방법은 보안성에 좋은 key 를 재생성해서 사용하는 것 같다.
추후 시간내서 조치해야 겠다.

 

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

ssh 접속시 느린 현상이 간혹 발생한다.


접속이 느린 지점 확인

# ssh -v server

-v 옵션을 줘서 어느 부분에서 접속이 느린지 확인한다


방법1) DNS resolving 문제

서버측의 /etc/ssh/sshd_config 에서

UseDNS no

로 해준다.


방법2) GSSAPIAuthentication  인증 문제

ssh -v 로 확인해본다.

debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Next authentication method: gssapi-keyex
debug1: No valid Key exchange context
debug1: Next authentication method: gssapi-with-mic
debug1: Unspecified GSS failure.  Minor code may provide more information
No Kerberos credentials available

debug1: Unspecified GSS failure.  Minor code may provide more information
No Kerberos credentials available

debug1: Unspecified GSS failure.  Minor code may provide more information


debug1: Unspecified GSS failure.  Minor code may provide more information
No Kerberos credentials available

debug1: Next authentication method: publickey

위 진한 부분에서 느리다면.  서버측에서 GSSAPI 를 지원하면 해당 인증을 먼저 시도하는데, 클라이언트측에서 설정이 안되어 있어서 지연현상이 발생하는 듯 하다.

/etc/ssh/ssh_config ( sshd_config 가 아님 )

    GSSAPIAuthentication no

위 옵션을 no 로 바꿔준다.

서버 관리자가 아닌경우  ~/.ssh/config 에 넣어줘도 된다.



반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

서버관리.

ssh 접속해서 관리할 수 있는 서버의 수는 제한적이다.
스크립트를 작성해서 관리하는 것도 한계가 있다.

자동화 툴을 사용해야 한다.

여러가지 이지만, 하나씩 알아보고 적당한 놈을 찾아보기로 한다.

후보로

1. 모니터링 : Icinga

=> 설정 관련글 : http://blog.1day1.org/547


2. 서버 자동화 : Chef

한번에 여러개를 다 해볼 수는 없고, 일단 후보 먼저 검증해 볼 예정이다.


일단 작은 부분의 관리 부터 검증해봐야 겠다.


반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

ssh 를 사용할때 자주 사용하는 호스트는 config 에 설정해놓으면 편리하다

위치는 자신의 홈디렉토리/.ssh/config 파일이다.

형식은.

Host serv
    hostname serv.domain.kr
    User root
    Port 22
    IdentityFile ~/.ssh/github.key

Host 부분에는 짧은 문자로 적어준다.

Host serv s1

이런식으로 여러개를 적어도 된다.

서버관리를 위해 root 나 특정계정을 적어주면 된다.

직접

ssh serv.domain.kr 

명령을 내리면 현재 로그인상태의 계정으로 접속하게 된다.
관리할 서버들이 동일한 계정이면 상관없는데, 다른 경우가 대부분이라 매번

ssh user@serv.domain.kr

이런 형태로 적는 것은 불편하다.

port 도 마찬가지이다.

기본포트가 22 번이지만, Brute force 공격등을 방지하기 위해 포트번호를 바꾸는 것이 좋기 때문에 Port 번호도 config 에 지정해주면 편하다.


또한 패스워드 없이 바로 접속하기 위해 IdentityFile 을 지정해주는 것도 편리하게 ssh 를 사용하는 좋은 방법이다.
(물론 key 파일은 주의해서 관리한다.)



반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
ssh 원격 실행을 하고 싶을때
  ssh {host} {명령}
이런식으로 해주면 된다.

그런데, 불편한 메시지가 나온다. 
  Pseudo-terminal will not be allocated because stdin is not a terminal

항상 나오는 것은 아니고, 단일명령을 주면 나오지 않는다.
command.sh 에 실행명령을 작성하고,  ssh {host} < command.sh  형식으로 할때 메시지가 나온다.

그런경우  ssh -t -t (두번)  옵션을 주어 실행하면 된다.

근데, 실행명령이 다 보인다. 

이때는 ssh -T 옵션을 준다.

그런데, 또 불편한 메시지가 보인다.
   TERM environment variable not set.

 ssh 실행시 해당 TERM 환경변수가 설정되지 않아서 그렇다.
타겟서버의 .ssh/environment 파일에(보통 파일이 없다. 그래서 새로 만들고)
  BASH_ENV=.profile
을 추가해준다. (경우에 따라서 .profile 을 .bash_profile 로 변경)

또는 그냥 간단하게, 명령셋에 다음을 추가해준다.
  export TERM=xterm
 
좀 이상하다. 나오다가 지금은 또 안나오네.(TERM ..)
 

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

authorized_keys2 를 .ssh 디렉토리에 넣으면 바로 접속이 가능했다.
그런데, centos6 에서는 계속 비번을 물어본다.

다음명령을 내려준다.

restorecon -R -v /root/.ssh

selinux 와 관련있는듯 하다. 버그라고도 하고.(좀더 살펴봐야 겠다)

selinux 를 끄는게 정답인가?


ps. authorized_keys2 의 권한설정 , sshd_config 를 이리저리 설정해봐도 안되는 경우가 바로 저 문제.
  selinux 를 끄는 것이 좀 찜찜하다면 저 방법으로.

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
원격 파일 전송하는 방법중 scp 와 rsync 를 주로 사용한다.
rsync 도 -e ssh 옵션을 붙여서 쓰니 둘의 차이는 별로 없다.

그런데, scp 의 경우 문제가 있다. 바로 symbolic link 의 처리.

scp -pr {local} {remote}
를 하면  local 의 파일을 원격으로 복사할 수 있다. 서브디렉토리포함, 파일시간 보존등.
그런데, 파일중 symbolic link 가 있다면 링크된 원본파일이 전송된다. symlink 가 유지 되지 않는다.

그런경우 rsync 를 쓴다.

rsync -avzu -e ssh  {local} {remote}
이렇게 하면 된다.
둘중 편한거 쓰면 된다.

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
rsync + ssh 에 대한 팁은 많다.
그런데, ssh 를 root 로 로그인을 허용해야 하는 방법의 설명이 많다. /etc/ssh/sshd_config 에서
PermitRootLogin yes
로 해야 한다.  그러나 왠지 root 로 허용하는 것은 좀 꺼려지게 된다.
(ssh brute force 공격이 일상화 되어 있기 때문에 더 염려된다.)


root 로 접근은 못하게 하면서,  rsync+ssh 를 쓸 수 없을까?

물론 있다.
PermitRootLogin forced-commands-only
라는 옵션이 있다.

.ssh / authorized_keys  의 public key 에 적어준 명령만 허용하는 옵션이다.
from="192.168.0.1",command="/root/bin/validate-rsync" ssh-dss IEUHFKSJHDOG ....
위 밑줄 친 부분이 추가된 것이다. 딱 보면 감이 올것이다.

from 부분
의 IP 는 허용할 IP주소이다. 이 주소가 제대로 들어가지 않으면..     이런 에러로그를 보게 된다. 허용한 IP가 아니라는 메세지이다.
sshd[21670]: Authentication tried for root with correct key but not from a permitted host (host=backup, ip=192.168.0.1).
from 부분에 IP 를 직접 적어주거나,  /etc/hosts  에 등록해서  host 값을 적어줘도 된다.
from="backup",command="...."
/etc/hosts 에는 다음과 같이 적어준다.
192.168.0.1  backup
도메인을 직접적어주는것은 안되는 듯 하다.


command 부분에 적어준 스크립트를 통해 실행하게 된다.
validate-rsync (이름은 아무거나 상관없음) 의 내용은 다음과 같다.
#!/bin/sh
case "$SSH_ORIGINAL_COMMAND" in
*\&*)
echo "Rejected"
;;
*\(*)
echo "Rejected"
;;
*\{*)
echo "Rejected"
;;
*\;*)
echo "Rejected"
;;
*\<*)
echo "Rejected"
;;
*\`*)
echo "Rejected"
;;
rsync\ --server*)
$SSH_ORIGINAL_COMMAND
;;
*)
echo "Rejected"
;;
esac
파일을 만들고, 실행권한을 준다.




참조문서
http://www.linux.com/archive/feature/113847
http://www.debianhelp.co.uk/rsync.htm
http://troy.jdmz.net/rsync/index.html
https://people.chem.umass.edu/wiki/index.php?title=RSYNC_and_SSH_With_Automated_Login
http://www.iwlearn.net/websitetoolkit/help/how-to/using-rsync-and-ssh

http://zakorea.tistory.com/24
http://bluetech.tistory.com/2

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
1) ssh 의 보안설정
음. ubuntu 의 sshd 는 root 접속을 허용한다.
바로 /etc/ssh/sshd_config 의 설정에서
PermitRootLogin yes
그런데, 보안상 권장하지 않는 방법이다. 일반적으로 no 로 설정해 놓는 것이 좋다.
또는 ssh 의 기본포트인 22 번 포트를 그냥 사용하는 것도 위험하다.

ssh brute force attack 이 끊이 없이 들어온다.
Port 22
의 기본포트를 다른 포트로 변경하는 것이 좋다.


2) root 로 로그인하고 싶을때는 방법이 없나?

간혹 root 로 로그인할 필요가 있다.(사실 거의 없다)
그런데, ssh 옵션에서 PermitRootLogin yes 로 해놓기는 좀 찜찜하다.
그런경우 ssh 접속을 특정 IP(clean IP?? )에서 접속이 가능하도록 해보자.
바로  /etc/hosts.allow 파일이다.
%주의% 잘못 만지면 접속을 못하는 수가 있으니, 원격작업은 가급적 하지 말자. ^^

파일을 열고 이렇게 입력해보자.
sshd: 127. : allow
sshd: 192. : allow
sshd: 210. : allow
sshd: ALL : deny
127, 192 등은 로컬IP 주소이다. 세번째 210. 은 210 으로 시작하는 IP 대역이다.
IP 주소 전체를 사용할 수도 있고, IP 주소를 class 단위로 정할 수도 있다.
(자신이 접속할 주소의 IP 를 적절하게 적어준다.)

또한 IP주소가 아닌 도메인주소로 적어줄 수도 있다.

허용한 대역의 IP 가 아닌경우 접속을 시도하면  다음처럼
ssh_exchange_identification: Connection closed by remote host
연결이 되지 않고 거부하게 된다.

/var/log/auth.log 에도 다음과 같이
sshd[5404]: refused connect from ::ffff:접속한IP주소 (::ffff: 접속한IP주소)
접속을 거부한 로그가 생긴다.


3) 다른 계정은 허용하고, root 계정만 특정IP 에서 접속하게 못하나?

사실 이것을 하기 위해 방법을 찾아보던 중이었다. 아직은 이 방법을 찾지 못하였다.
그래서 일단 2) 번으로 설정중. (방법이 있을 법 한데, 좀더 알아봐야 겠다.)

PermitRootLogin 의 몇가지 옵션으로 처리가 가능할 듯 싶다.
(바로 'force-commands-only'  root 로그인을 public key 인증으로는 허용하는 듯)


반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,