LINUX 에서 OS Errno 별 설명을 확인하는 방법입니다.



1. /usr/include/asm-generic 경로로 이동합니다.

# cd /usr/include/asm-generic


2. errno-base.h 와 errno.h 파일에서 정의된 errno 번호와 설명을 확인합니다.

# cat errno-base.h
#ifndef _ASM_GENERIC_ERRNO_BASE_H
#define _ASM_GENERIC_ERRNO_BASE_H

#define EPERM            1      /* Operation not permitted */
#define ENOENT           2      /* No such file or directory */
#define ESRCH            3      /* No such process */
#define EINTR            4      /* Interrupted system call */
#define EIO              5      /* I/O error */
#define ENXIO            6      /* No such device or address */
#define E2BIG            7      /* Argument list too long */
#define ENOEXEC          8      /* Exec format error */
#define EBADF            9      /* Bad file number */
#define ECHILD          10      /* No child processes */
#define EAGAIN          11      /* Try again */
#define ENOMEM          12      /* Out of memory */
#define EACCES          13      /* Permission denied */
#define EFAULT          14      /* Bad address */
#define ENOTBLK         15      /* Block device required */
#define EBUSY           16      /* Device or resource busy */
#define EEXIST          17      /* File exists */
#define EXDEV           18      /* Cross-device link */
#define ENODEV          19      /* No such device */
#define ENOTDIR         20      /* Not a directory */
#define EISDIR          21      /* Is a directory */
#define EINVAL          22      /* Invalid argument */
#define ENFILE          23      /* File table overflow */
#define EMFILE          24      /* Too many open files */
#define ENOTTY          25      /* Not a typewriter */
#define ETXTBSY         26      /* Text file busy */
#define EFBIG           27      /* File too large */
#define ENOSPC          28      /* No space left on device */
#define ESPIPE          29      /* Illegal seek */
#define EROFS           30      /* Read-only file system */
#define EMLINK          31      /* Too many links */
#define EPIPE           32      /* Broken pipe */
#define EDOM            33      /* Math argument out of domain of func */
#define ERANGE          34      /* Math result not representable */

#endif
# cat errno.h
#ifndef _ASM_GENERIC_ERRNO_H
#define _ASM_GENERIC_ERRNO_H

#include <asm-generic/errno-base.h>

#define EDEADLK         35      /* Resource deadlock would occur */
#define ENAMETOOLONG    36      /* File name too long */
#define ENOLCK          37      /* No record locks available */
#define ENOSYS          38      /* Function not implemented */
#define ENOTEMPTY       39      /* Directory not empty */
#define ELOOP           40      /* Too many symbolic links encountered */
#define EWOULDBLOCK     EAGAIN  /* Operation would block */
#define ENOMSG          42      /* No message of desired type */
#define EIDRM           43      /* Identifier removed */
#define ECHRNG          44      /* Channel number out of range */
#define EL2NSYNC        45      /* Level 2 not synchronized */
#define EL3HLT          46      /* Level 3 halted */
#define EL3RST          47      /* Level 3 reset */
#define ELNRNG          48      /* Link number out of range */
#define EUNATCH         49      /* Protocol driver not attached */
#define ENOCSI          50      /* No CSI structure available */
#define EL2HLT          51      /* Level 2 halted */
#define EBADE           52      /* Invalid exchange */
#define EBADR           53      /* Invalid request descriptor */
#define EXFULL          54      /* Exchange full */
#define ENOANO          55      /* No anode */
#define EBADRQC         56      /* Invalid request code */
#define EBADSLT         57      /* Invalid slot */

#define EDEADLOCK       EDEADLK

#define EBFONT          59      /* Bad font file format */
#define ENOSTR          60      /* Device not a stream */
#define ENODATA         61      /* No data available */
#define ETIME           62      /* Timer expired */
#define ENOSR           63      /* Out of streams resources */
#define ENONET          64      /* Machine is not on the network */
#define ENOPKG          65      /* Package not installed */
#define EREMOTE         66      /* Object is remote */
#define ENOLINK         67      /* Link has been severed */
#define EADV            68      /* Advertise error */
#define ESRMNT          69      /* Srmount error */
#define ECOMM           70      /* Communication error on send */
#define EPROTO          71      /* Protocol error */
#define EMULTIHOP       72      /* Multihop attempted */
#define EDOTDOT         73      /* RFS specific error */
#define EBADMSG         74      /* Not a data message */
#define EOVERFLOW       75      /* Value too large for defined data type */
#define ENOTUNIQ        76      /* Name not unique on network */
#define EBADFD          77      /* File descriptor in bad state */
#define EREMCHG         78      /* Remote address changed */
#define ELIBACC         79      /* Can not access a needed shared library */
#define ELIBBAD         80      /* Accessing a corrupted shared library */
#define ELIBSCN         81      /* .lib section in a.out corrupted */
#define ELIBMAX         82      /* Attempting to link in too many shared libraries */
#define ELIBEXEC        83      /* Cannot exec a shared library directly */
#define EILSEQ          84      /* Illegal byte sequence */
#define ERESTART        85      /* Interrupted system call should be restarted */
#define ESTRPIPE        86      /* Streams pipe error */
#define EUSERS          87      /* Too many users */
#define ENOTSOCK        88      /* Socket operation on non-socket */
#define EDESTADDRREQ    89      /* Destination address required */
#define EMSGSIZE        90      /* Message too long */
#define EPROTOTYPE      91      /* Protocol wrong type for socket */
#define ENOPROTOOPT     92      /* Protocol not available */
#define EPROTONOSUPPORT 93      /* Protocol not supported */
#define ESOCKTNOSUPPORT 94      /* Socket type not supported */
#define EOPNOTSUPP      95      /* Operation not supported on transport endpoint */
#define EPFNOSUPPORT    96      /* Protocol family not supported */
#define EAFNOSUPPORT    97      /* Address family not supported by protocol */
#define EADDRINUSE      98      /* Address already in use */
#define EADDRNOTAVAIL   99      /* Cannot assign requested address */
#define ENETDOWN        100     /* Network is down */
#define ENETUNREACH     101     /* Network is unreachable */
#define ENETRESET       102     /* Network dropped connection because of reset */
#define ECONNABORTED    103     /* Software caused connection abort */
#define ECONNRESET      104     /* Connection reset by peer */
#define ENOBUFS         105     /* No buffer space available */
#define EISCONN         106     /* Transport endpoint is already connected */
#define ENOTCONN        107     /* Transport endpoint is not connected */
#define ESHUTDOWN       108     /* Cannot send after transport endpoint shutdown */
#define ETOOMANYREFS    109     /* Too many references: cannot splice */
#define ETIMEDOUT       110     /* Connection timed out */
#define ECONNREFUSED    111     /* Connection refused */
#define EHOSTDOWN       112     /* Host is down */
#define EHOSTUNREACH    113     /* No route to host */
#define EALREADY        114     /* Operation already in progress */
#define EINPROGRESS     115     /* Operation now in progress */
#define ESTALE          116     /* Stale file handle */
#define EUCLEAN         117     /* Structure needs cleaning */
#define ENOTNAM         118     /* Not a XENIX named type file */
#define ENAVAIL         119     /* No XENIX semaphores available */
#define EISNAM          120     /* Is a named type file */
#define EREMOTEIO       121     /* Remote I/O error */
#define EDQUOT          122     /* Quota exceeded */

#define ENOMEDIUM       123     /* No medium found */
#define EMEDIUMTYPE     124     /* Wrong medium type */
#define ECANCELED       125     /* Operation Canceled */
#define ENOKEY          126     /* Required key not available */
#define EKEYEXPIRED     127     /* Key has expired */
#define EKEYREVOKED     128     /* Key has been revoked */
#define EKEYREJECTED    129     /* Key was rejected by service */

/* for robust mutexes */
#define EOWNERDEAD      130     /* Owner died */
#define ENOTRECOVERABLE 131     /* State not recoverable */

#define ERFKILL         132     /* Operation not possible due to RF-kill */

#define EHWPOISON       133     /* Memory page has hardware error */

#endif



블로그 이미지

사용자 꽁담

터미널 환경에서는 일반 데스크탑의 장치관리자처럼 UI 적으로 볼 수 없기 때문에 모델을 확인하기 힘든 경우가 있습니다.


리눅스 터미널에서 장비들의 모델 및 스펙을 확인하는 방법을 알아보겠습니다.



메인보드

메인보드의 모델을 확인하는 방법입니다

명령어 dmidecode -t system

  dmidecode -t baseboard 라는 명령어도 있지만, system 에 포함되므로 따로 확인하지 않아도 됩니다.

dmidecode -t system 열기



바이오스

바이오스의 정보를 확인하는 방법입니다

명령어 dmidecode -t bios

dmidecode -t bios 열기



씨피유

씨피유 모델을 확인하는 방법입니다.

명령어 dmidecode -t processor

dmidecode -t processor 열기


코어별로 좀더 세분화되어 정보를 확인하는 방법입니다.

명렁어 cat /proc/cpuinfo

cat /proc/cpuinfo 열기


씨피유의 현재 사용량 및 유휴 등을 확인하는 방법입니다.

명령어 top

top 열기



메모리

메모리의 모델을 확인하는 방법입니다.

명령어 dimdecode -t memory

dmidecode -t memory 열기


메모리의 전체크기 및 사용량 / 여유량 등을 확인하는 방법입니다.
명령어 free 혹은 cat /proc/meminfo

free 열기


cat /proc/meminfo 열기



디스크

디스크 모델을 확인하는 방법입니다.

명령어 lshw -class disk

lshw -class disk 열기


디스크의 사용량 여유랑을 보는 방법입니다.

명령어 df

df 열기



네트워크

네트워크 모델을 확인하는 방법입니다.

명렁어 lshw -class network

lshw -class network 열기



이외에도 시스템 확인에서 유용한 명령어들을 몇개 나열하자면, 아래와 같은 명령어 등이 있습니다.


lshw : 하드웨어의 모든 정보를 출력합니다.

lshw -class bus : bus 로 묶인 장치(usb 장치들 등)들을 출력합니다

ifconfig -a : 현재 네트워크 상태를 출력합니다.

블로그 이미지

사용자 꽁담

Network 개념은 매우 방대하며, 저는 Network 쪽은 아니라서 자세히 정리는 하지 못할 것 같습니다.

또한, 여기서 정리한 내용이 어딘가 분명 오류가 있을거 같아서 정말 맞다고 표현하기도 어렵습니다.


다만, CLOSE_WAIT 과 TIME_WAIT 에 대한 어느정도의 지식은 필요할 거 같아서 정리를 진행하려고 합니다.




CLOSE_WAIT

서버 혹은 클라이언트가 close 요청을 받았을 때를 나타냅니다.

CLOSE_WAIT 은 다른 상태들과 달리, 프로세스 종료 혹은 네트워크 재시작 외에는 제거할 방법이 없습니다.


만약 서버와 클라이언트가 동시에 close 요청을 받게되면, 양쪽에서 CLOSE_WAIT 현상이 나타나고 교착상태에 빠지게됩니다.



CLOSE_WAIT 를 제거하고 싶은 경우 아래 명령어를 환경에 맞춰 수정한 뒤 수행하면 됩니다.

아래스크립트는 다음과 같은 의미를 내포합니다.

192.168.0.50 서버의 22581 포트에서 CLOSE_WAIT 로 되어있는 PID 를 kill 합니다.

$ netstat -nap | grep 192.168.0.50 | grep :22581 | grep CLOSE_WAIT | awk '{print $7}' | cut -d \/ -f1 | grep -oE "[[:digit:]]{1,}" | xargs kill




TIME_WAIT

TCP 접속부터 종료까지의 가장 마지막 단계이며, 먼저 close() 를 요청한 쪽에서 최종적으로 남게됩니다.


TIME_WAIT 유지시간은 include/net/tcp.h 파일에 고정값 60초로 되어 있으며 조절 할 수 없습니다.

# grep TCP_TIMEWAIT_LEN tcp.h
#define TCP_TIMEWAIT_LEN (60*HZ)


하지만 클라이언트가 굉장히 빈번한 상황에서 TIME_WAIT 유지시간은 소켓의 최대개수에 영향을 미칠 수 있으므로(사실 거의 발생할 리 없지만), 프로퍼티 설정을 통해 TIME_WAIT 로 되어있는 소켓을 바로 재사용 할 수 있도록 설정할 수 있습니다.

# cat sysctl.conf | grep tcp_tw_reuse
net.ipv4.tcp_tw_reuse = 1
# sysctl -p | grep tcp_tw_reuse
net.ipv4.tcp_tw_reuse = 1


만약, 서버와 클라이언트가 NAT 환경이 아닌, 1 : 1 로 직접 연결되는 경우 아래 프로퍼티를 설정함으로 써 TIME_WAIT 시간을 줄일 수 있습니다.

또한, 아래 프로퍼티가 활성화 되어있는 경우, TCP_TIMEWAIT_LEN 설정값이 아닌 retransmission timeout (3.5초) 값으로 적용됩니다.

그렇다고 하여 TCP_TIMEWAIT_LEN 값이 변경된 것은 아닙니다.

# cat sysctl.conf | grep tcp_tw_recycle
net.ipv4.tcp_tw_recycle = 1
# sysctl -p | grep tcp_tw_recycle
net.ipv4.tcp_tw_recycle = 1



참고url

http://docs.likejazz.com/close-wait/

http://docs.likejazz.com/time-wait/

블로그 이미지

사용자 꽁담

TCP 를 사용하여 통신하는 암호화 되어있지 않은 데이터는 tcpdump 명령어로 가로챌 수 있습니다.

tcpdump 는 sudo 권한이 있는 유저 혹은 root 계정에서 수행할 수 있습니다.



132번 서버의 eth4 이더넷카드명, 10101 포트를 통해서 데이터는 받는 경우입니다.

132번 서버에서 아래 명령어를 수행합니다.

$ tcpdump -xXvvvs 1024 -i eth4 tcp port 10101


10101 포트를 통해서 들어오는 데이터 중, 원하는 내용을 캡쳐합니다.

0x00b0:  0000 0000 0000 010a 5449 5354 4f52 5920  ........TISTORY.
0x00c0:  2020 0a4d 4f5a 4920 2020 2020 2010 0700  ...MOZI.........
0x00d0:  0000 0000 0025 0001 0000 0000 0000 0201  .....%..........


tcpdump 의 옵션은 매우 다양합니다.

이더넷 카드가 아닌 호스트명으로도 줄 수 있으며, 헥사와 아스키값을 출력할 수 있습니다.

블로그 이미지

사용자 꽁담

yum 명령어를 사용 시, 아래와 같은 오류가 뜨면서 yum 이 수행되지 않은 때 해결 방법입니다.

Loaded plugins: fastestmirror, langpacks
Determining fastest mirrors
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error was
14: curl#6 - "Could not resolve host: mirrorlist.centos.org; 알 수 없는 오류"


 One of the configured repositories failed (Unknown),
 and yum doesn't have enough cached data to continue. At this point the only
 safe thing yum can do is fail. There are a few ways to work "fix" this:

     1. Contact the upstream for the repository and get them to fix the problem.

     2. Reconfigure the baseurl/etc. for the repository, to point to a working
        upstream. This is most often useful if you are using a newer
        distribution release than is supported by the repository (and the
        packages for the previous distribution release still work).

     3. Run the command with the repository temporarily disabled
            yum --disablerepo=<repoid> ...

     4. Disable the repository permanently, so yum won't use it by default. Yum
        will then just ignore the repository until you permanently enable it
        again or use --enablerepo for temporary usage:

            yum-config-manager --disable <repoid>
        or
            subscription-manager repos --disable=<repoid>

     5. Configure the failing repository to be skipped, if it is unavailable.
        Note that yum will try to contact the repo. when it runs most commands,
        so will have to try and fail each time (and thus. yum will be be much
        slower). If it is a very temporary problem though, this is often a nice
        compromise:

            yum-config-manager --save --setopt=<repoid>.skip_if_unavailable=true

Cannot find a valid baseurl for repo: base/7/x86_64


1. route 명령어로 게이트웨이가 제대로 설정되어 있는지 확인합니다.

# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         gateway         0.0.0.0         UG    100    0        0 enp7s0
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 enp7s0
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
gateway         0.0.0.0         255.255.255.255 UH    100    0        0 enp7s0

제대로 설정되어 있지 않은경우 게이트웨이 값을 설정한 뒤 네트워크를 재시작 합니다.     

# cat /etc/sysconfig/network # Created by anaconda GATEWAY=192.168.0.1

# service network restart
Restarting network (via systemctl):                        [  OK  ]

2. nslookup 명령어로 설정된 DNS 가 제대로 설정되어 있는지 확인합니다.
# nslookup
> server
Default server: 127.0.0.1
Address: 127.0.0.1#53
Default server: 168.126.63.1
Address: 168.126.63.1#53
Default server: 168.126.63.2
Address: 168.126.63.2#53
> exit

제대로 설정되어 있지 않은경우 DNS 값을 설정합니다. 이 때 설정값은 1 개 이상이 될 수 있습니다.

# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 127.0.0.1
nameserver 168.126.63.1
nameserver 168.126.63.2


3. /etc/sysconfig/network-scripts/ifcfg-[이더넷명] 의 프로퍼티 값을 확인합니다.

     GATEWAY, DNS, IPADDR, ONBOOT 등등의 설정값을 확인한 뒤 위에서 설정한 값과 동일하게 설정합니다.

# vi /etc/sysconfig/network-scripts/ifcfg-enp7s0
DEVICE="enp7s0"
ONBOOT="yes"
IPADDR="192.168.0.50"
PREFIX="24"
GATEWAY="192.168.0.1"
DNS1="168.126.63.1"


4. 외부 아이피로 핑을 날려봅니다.

# ping 8.8.8.8 # google PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=56 time=30.9 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=56 time=30.1 ms --- 8.8.8.8 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 30.194/30.581/30.968/0.387 ms


5. 핑이 제대로 날라가면 yum 명령어를 다시 수행합니다.

   yum 명령어가 적용되는 것을 확인할 수 있습니다.

# yum search cmake
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: data.nicehosting.co.kr
 * extras: data.nicehosting.co.kr
 * updates: data.nicehosting.co.kr
base                                                                                                                                                                                                                  | 3.6 kB  00:00:00
extras                                                                                                                                                                                                                | 3.4 kB  00:00:00
updates                                                                                                                                                                                                               | 3.4 kB  00:00:00
(1/4): base/7/x86_64/primary_db                                                                                                                                                                                       | 5.9 MB  00:00:00
(2/4): extras/7/x86_64/primary_db                                                                                                                                                                                     | 147 kB  00:00:02
(3/4): base/7/x86_64/group_gz                                                                                                                                                                                         | 166 kB  00:00:03
(4/4): updates/7/x86_64/primary_db                                                                                                                                                                                    | 2.0 MB  00:00:18
============================================================================================================ N/S matched: cmake =============================================================================================================
cmake-gui.x86_64 : Qt GUI for cmake
cmake.x86_64 : Cross-platform make system

  Name and summary matches only, use "search all" for everything.


블로그 이미지

사용자 꽁담

SSH 로 접속을 할 때, 수 초 이상이 걸리는 경우에 확인 방법입니다.


/etc/resolv.conf 파일의 nameserver 값을 확인합니다.

# cat /etc/resolv.conf 
# Generated by NetworkManager
nameserver 168.126.63.1

만약 가장 처음나오는 nameserver 의 값이 127.0.0.1 이 아닌 경우 가장 윗줄에 아래 내용을 추가합니다.

# cat /etc/resolv.conf 
# Generated by NetworkManager
nameserver 127.0.0.1


이 후 속도가 빨라진 것을 확인할 수 있습니다.

블로그 이미지

사용자 꽁담

LINUX 에서 디스크가 HDD 인지 SSD 인지 확인하는 방법입니다.


먼저 df 명령어로 파일시스템명을 조회합니다.

$ df
Filesystem     1K-blocks      Used Available Use% Mounted on
/dev/sda3      103080888   6388924  91432700   7% /
...


이 후 파일시스템 명칭을 이용하여, 디스크 정보를 확인합니다.

$ cat /sys/block/sda/queue/rotational
1

HDD 는 1, SSD 는 0 입니다.

블로그 이미지

사용자 꽁담

BOM

Byte Other Mark, 텍스트 시작 부분에 있는 정보를 담고있는 내용입니다.

Windows 의 메모장같은 경우 BOM 내용을 저장하기 때문에, 문제가 발생할 수 있습니다.



xxd 명령어를 사용하여 거래처.csv 파일의 BOM 내용을 확인합니다.

거래처.csv 파일 앞에 헥사값 efbbbf 라는 BOM 내용이 들어가 있습니다.

$ xxd 거래처.csv | head -3
0000000: efbb bf43 3131 3031 3031 3636 7c30 3130  ...C11010166|010
0000010: 3136 367c eb86 8dec 9785 ed9a 8cec 82ac  166|............
0000020: ebb2 95ec 9db8 eca1 b0ec 9db8 28ec a3bc  ............(...

아래 명령어를 사용하여, BOM 을 제거해보겠습니다.

efbbbf 를 제거한 내용을, 거래처2.csv 파일로 저장합니다.

$ sed '1s/^\xEF\xBB\xBF//' < 거래처.csv > 거래처2.csv
$ xxd 거래처2.csv | head -3
0000000: 4331 3130 3130 3136 367c 3031 3031 3636  C11010166|010166
0000010: 7ceb 868d ec97 85ed 9a8c ec82 aceb b295  |...............
0000020: ec9d b8ec a1b0 ec9d b828 eca3 bc29 ec9a  .........(...)..


또는, -i 옵션을 사용하여 efbbbf 를 제거한 뒤 덮어씁니다.

$ sed -i '1s/^\xEF\xBB\xBF//' 거래처.csv
$ xxd 거래처.csv | head -3
0000000: 4331 3130 3130 3136 367c 3031 3031 3636  C11010166|010166
0000010: 7ceb 868d ec97 85ed 9a8c ec82 aceb b295  |...............
0000020: ec9d b8ec a1b0 ec9d b828 eca3 bc29 ec9a  .........(...)..


블로그 이미지

사용자 꽁담

RemoveIPC

사용자가 로그아웃을 하였을 때, System V 와 POSIX IPC 객체를 제거하는 리눅스 프로퍼티입니다.


기존 커널은 RemoveIPC 가 no 로 설정되어 있어 사용자가 로그아웃해도 제거되지 않았으나,

centos 기준 커널 3.0 이상에서 기본 속성값이 yes 로 변경되면서, 문제가 발생되고 있습니다.


대표적인 예로 GOLDILOCKS 의 세션접속이 불가능 해집니다.



RemoveIPC 를 no 로 설정하는 방법


1. /etc/systemd/logind.conf 파일을 편집기로 엽니다.

2. RemoveIPC 값을 no 로 변경합니다.

3. system 설정값을 재시작(적용) 합니다.

# vi /etc/systemd/logind.conf
[Login]
...
RemoveIPC=no

# systemctl restart systemd-logind


블로그 이미지

사용자 꽁담

SSH


원격 장비에 접속할 수 있는 유틸리티를 의미합니다.




다음과 같은 상황일 때 아래와 같은 오류가 발생합니다.


1. 초기에 원격지 장비의 정보를 로컬장비에 저장합니다.

2. 원격지 장비의 정보가 어떤 상황으로 인해 변경됩니다.

3. 로컬장비는 원격지 정보의 이전정보를 가지고 있으므로, 충돌이 발생합니다.


@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
SHA256:++qZP9iqBJSzBY8xVurasQYUFp8kxvlX1VvgK+ZxfQE.
Please contact your system administrator.
Add correct host key in /home/sh91/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/sh91/.ssh/known_hosts:19
RSA host key for 192.168.0.138 has changed and you have requested strict checking.
Host key verification failed.


해결방안


ssh-keygen 명령어를 사용하여 원격지 장비의 정보를 재등록합니다.



192.168.0.138 IP 에 대해 위와 같은 내용이 발생한 경우입니다.


1. 192.168.0.138 원격장비 IP 를 재등록합니다.


[sh91@sunje conf]$ ssh-keygen -R 192.168.0.138
# Host 192.168.0.138 found: line 19
/home/sh91/.ssh/known_hosts updated.
Original contents retained as /home/sh91/.ssh/known_hosts.old


2. ssh 명령어를 이용하여 재접속을 시도합니다. yes/no 를 묻는 부분에서 yes 를 입력합니다.


$ ssh sh91@192.168.0.138 The authenticity of host '192.168.0.138 (192.168.0.138)' can't be established. RSA key fingerprint is SHA256:++qZP9iqBJSzBY8xVurasQYUFp8kxvlX1VvgK+ZxfQE. RSA key fingerprint is MD5:d8:36:a8:97:25:0d:a0:51:4f:d1:3e:ba:b2:ab:2e:11. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.0.138' (RSA) to the list of known hosts. sh91@192.168.0.138's password: Last login: Mon Apr 9 15:33:25 2018 from 192.168.0.50








블로그 이미지

사용자 꽁담