나는 여기에서 많은 SSH 연결 거부 게시물을 읽었고 이를 작성한 후에도 계속 읽을 것입니다. 그러나 내 컴퓨터에서 작동하기를 바라면서 모든 솔루션을 맹목적으로 시도하는 대신 내 실패를 기록하고 싶습니다. 해결 프로세스를 제거합니다.
목표: SSH 루트를 사용하여 내 서버에 로그인
질문:
$ ssh [email protected]
ssh: connect to host 123.456.78.911 port 22: Connection refused
컨텍스트 서버: Digital Ocean(VM - 월 5달러)
OS: Windows 10, Linux 하위 시스템, Ubuntu Bash, Linux 하위 시스템
OpenSSH - 클라이언트 및 서버 모두 설치
방화벽 - 할당량에 SSHD 추가(입력 및 출력)
문제 해결 프로세스
편집: 자세한 모드 출력이 추가되었습니다.
ssh -v [email protected]
OpenSSH_8.2p1 Ubuntu-4ubuntu0.1, OpenSSL 1.1.1f 31 Mar 2020
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
debug1: /etc/ssh/ssh_config line 21: Applying options for *
debug1: Connecting to xxx.xxx.xx.xxx [xxx.xxx.xx.xxx] port 22.
debug1: connect to address xxx.xxx.xx.xxx port 22: Connection refused
ssh: connect to host xxx.xxx.xx.xxx port 22: Connection refused
이전에
이 컴퓨터에서 내 서버에 연결했지만 이번 달 초에 공장 초기화를 수행해야 했습니다. 처음에 문제가 생겼을 때 어떻게 해결했는지 기억이 나지 않습니다(1년 전이었습니다). DO가 서버 측에서 SSH를 활성화했다고 확신하므로 개인 키와 공개 키가 잘못 배치되어 파일 경로를 어딘가에서 변경해야 할 것 같습니다. Windows에서 Ubuntu를 사용할 때 파일 위치 문제가 있었던 것을 기억합니다.
다른 인증 파일에 공개 키와 개인 키를 추가해야 합니까? 아니면 주요 위치인가요?
답변1
첫째: 무슨 일이 일어나야 하는지에 대한 기본 사항을 이해합니다.
Windows 데스크탑의 SSH 클라이언트 프로세스는 DigitalOcean VM의 TCP 포트 22에 연결되어야 합니다. 연결이 설정되면 root
SSH 키를 사용하여 사용자를 인증해야 합니다.
이는 필요하지 않음 sshd
(또는 "ssh 서비스")을 의미합니다. 허용하려는 경우에만 필요합니다.기입데스크탑에 SSH로 연결합니다.
"연결이 거부되었습니다"라는 메시지가 나타납니다. 이는 다음 중 하나를 의미합니다.
- 클라우드 VM에 대한 올바른 IP 주소가 없을 수 있습니다. (클라우드 VM의 경우 VM 내부에서 볼 수 있는 로컬 IP 주소는 클라우드 인프라에서 인터넷에 제공하는 주소와 다를 수 있습니다.)
- 로컬 네트워크는 로컬 네트워크 외부의 서비스에 액세스하기 위해 프록시를 사용해야 할 수도 있습니다(직장 네트워크에서 일반적임).
- Digital Ocean VM이 전혀 실행되지 않을 수 있습니다.
- 클라우드에 있는 가상 머신의 방화벽은 허용된 소스 IP 주소가 지정될 때까지 들어오는 SSH 연결을 허용하지 않을 수 있습니다.
- 클라우드 가상 머신에서 SSH 서비스를 활성화하려면 Digital Ocean의 웹 UI/API를 사용해야 할 수도 있습니다.
가상 머신의 SSH 포트에 대한 기본 TCP 연결을 설정할 수 있으면 인증 문제 해결을 계속할 수 있습니다.
클라우드 가상 머신에서 비밀번호 인증 로그인 허용 예아주 나쁜 생각SSH 포트에 대한 액세스가 알려진 IP 주소로 제한되지 않는 경우 SSH 지원 호스트를 찾기 위해 인터넷을 검색하고 root
.
sshd
root
(SSH 서비스) 다른 사용자에 대해 비밀번호 인증을 활성화할 수 있더라도 직접 로그인을 항상 거부하거나 키 인증만 허용하도록 하는 특수 설정도 있습니다 . 이 설정은 클라우드 서비스에 적극 권장됩니다.
여러 사람이 가상 머신을 유지 관리하는 경우 개별 사용자 계정으로 로그인하면 sudo
로그를 사용하여 필요한 경우 누가 무엇을 했는지 쉽게 확인할 수 있습니다. 클라우드 공급자는 root
초기 로그인 이외의 특정 사용자 계정을 사용하도록 요구할 수 있습니다. 일단 성공적으로 연결하고 루트 액세스 권한을 얻으면 필요에 따라 가상 머신을 구성할 수 있습니다.
일반적으로 클라우드 공급자는 가상 머신에 대한 초기 SSH 액세스를 위해 사전 생성된 SSH 개인 키를 제공합니다. 가능한 키 파일 형식에는 여러 가지가 있습니다. *.ppk
PuTTY용 파일, 일반적인 무료 Windows SSH 클라이언트(현재 Linux에서도 사용 가능), id_*
OpenSSH용 특정 접미사가 없는 파일입니다. 일반적으로 키는 해당 키 생성 도구를 사용하여 한 형식에서 다른 형식으로 변환(예: 파일을 OpenSSH 형식으로 PuTTYgen keyfile.ppk -O private-openssh -o id_openssh
변환 )할 수 있습니다.*.ppk
WSL의 명령줄 SSH 클라이언트를 사용하는 경우 이는 OpenSSH의 한 형태입니다. 일반적으로 OpenSSH는 로컬 사용자 홈 디렉터리의 하위 디렉터리( .ssh
사용된 알고리즘에 따라 , , id_rsa
등 으로 명명됨 ) 에서 기본 개인 키를 찾습니다 . 이러한 개인 키 파일이 존재하고 키 기반 인증이 허용되는 경우 클라이언트는 자동으로 해당 파일을 원격 서버에 제공합니다.id_dsa
id_ecdsa
id_ed25519
WSL에서는 Unix 스타일 홈 디렉터리의 위치가 명확하지 않을 수 있으므로 이 -i
옵션을 사용하여 사용할 개인 키 파일을 명시적으로 지정해야 할 수도 있습니다.
키 인증을 사용할 때 올바른 사용자 이름을 지정해야 하므로 SSH 명령은 다음과 같습니다.
ssh -i /some/where/id_digitalocean_privatekey [email protected]
답변2
음, 우선. 이 설정을 사용하지 마십시오. 사실 당신은 그 MAC을 전혀 사용하고 싶지 않습니다!
비밀번호 확인을 활성화해 보셨나요? 이것이 작동하는지 확인하기 위해? /var/log/auth.log도 확인하셨나요? /etc/sshd/sshd_config에서 sshd 로깅의 자세한 정도를 높였습니까?
나에게는 sshd 데몬이 포트 22에서 올바르게 수신 대기하지 않는다는 것이 더 우려됩니다. 그렇기 때문에 연결이 거부됩니다. nmap을 사용하여 포트가 실제로 열려 있는지 확인할 수 있습니다.
sudo nmap -sSV -O -p 22 -v9 destination_IP