← Back to team overview

sslug-teknik team mailing list archive

Ssh problemer

 

Hej

Jeg er løbet ind i nogle problemer med en ny installeret gentoo (min
foretrukken dist igennem mange år) maskine og dens ssh client.
Maskinen som problemet optræder på, er installeret i et lokal netværk
med 1+ andre linux maskiner. I min beskrivelse af problemet anvender
jeg 3 maskiner, PC1 som er den der har problemet, Laptop som er en
anden (gammel) gentoo maskine der ikke har problemet, og så Server1
der findes på internettet.

PC1: Maskinen hvor jeg oplever ssh problemer.
IP: 10.0.0.4/24

Laptop: En anden vel fungerende maskine
IP: 10.0.0.3

Server: en ubuntu server som er tilgængelig via internettet
IP: 88.198.116.73

Her er problemet:

TEST1: ssh fra PC1 til Laptop virker fint.
TEST2: ssh fra Laptop til PC1 virker fint.
TEST3: ssh fra Laptop til Server virker fint.
http get requerst fra PC1 til Server virker fint (så der er hul
igennem på IP level)

Hvad der ikke virker er ssh fra PC1 til Server. (da jeg er bag NAT som
jeg ikke selv administrer kan jeg ikke forsøge Server til PC1)

Her er hvad der sker når jeg forsøger:
awn@pc1 ~ $ ssh -vvv 88.198.116.73
OpenSSH_5.8p1-hpn13v10, OpenSSL 1.0.0d 8 Feb 2011
debug1: Reading configuration data /etc/ssh/ssh_config
debug2: ssh_connect: needpriv 0
debug1: Connecting to 88.198.116.73 [88.198.116.73] port 22.
debug1: Connection established.
debug1: identity file /home/awn/.ssh/id_rsa type -1
debug1: identity file /home/awn/.ssh/id_rsa-cert type -1
debug1: identity file /home/awn/.ssh/id_dsa type -1
debug1: identity file /home/awn/.ssh/id_dsa-cert type -1
debug1: identity file /home/awn/.ssh/id_ecdsa type -1
debug1: identity file /home/awn/.ssh/id_ecdsa-cert type -1

<< HER HÆNGER DEN SÅ INDTIL JEG AFBRYDER >>

Da det i ssh protocollen (så vidt jeg ved) er serveren som indleder
samtalen med en host string efter connection af en client, har jeg
anvendet netcat til at debugge problemet. Netcat er blevet anvendet
til at reproducere de 3 fungerende tests, samt efter forske den ikke
fungerende:

TEST1:
awn@pc1 ~ $ netcat 10.0.0.3 22
SSH-2.0-OpenSSH_5.8p1-hpn13v10

TEST2:
awn@laptop ~ $ netcat 10.0.0.4 22
SSH-2.0-OpenSSH_5.8p1-hpn13v10

TEST3:
awn@laptop ~ $ netcat 88.198.116.73 22
SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu5


PC1 til server:
awn@pc1 ~ $ netcat 88.198.116.73 22
<< HER HÆNGER DEN SÅ INDTIL JEG AFBRYDER >>

PC1 til ander externe server:
awn@pc1 ~ $ netcat erlang.gbar.dtu.dk 22
SSH-2.0-Sun_SSH_1.1.3
awn@pc1 ~ $ netcat kernel.org 22
SSH-2.0-OpenSSH_5.4p1

Så ingen problemer her...

Dobbelt tjek af at der er hul igennem fra PC1 til Server:
awn@pc1 ~ $ netcat 88.198.116.73 80
asdf
<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/0.7.65</center>
</body>
</html>

Dette ser ud til at fungere som det skal...


Ingen hints som jeg fangede her, jeg har derfor forsat med strace, for
at sammenligne hvad er sker i TEST1, TEST3 samt PC1->Server, den del
af output som jeg fandt relevant kommer her:

TEST1:
execve("/usr/bin/netcat", ["netcat", "10.0.0.3", "22"], [/* 55 vars */]) = 0
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3
setsockopt(3, SOL_SOCKET, SO_LINGER, {onoff=1, linger=0}, 8) = 0
setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
fcntl(3, F_GETFL)                       = 0x2 (flags O_RDWR)
fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK)    = 0
connect(3, {sa_family=AF_INET, sin_port=htons(22),
sin_addr=inet_addr("10.0.0.3")}, 16) = -1 EINPROGRESS (Operation now
in progress)
select(4, NULL, [3], NULL, NULL)        = 1 (out [3])
getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
open("/usr/share/locale/en_US.utf8/LC_MESSAGES/libc.mo", O_RDONLY) =
-1 ENOENT (No such file or directory)
open("/usr/share/locale/en_US/LC_MESSAGES/libc.mo", O_RDONLY) = -1
ENOENT (No such file or directory)
open("/usr/share/locale/en.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1
ENOENT (No such file or directory)
open("/usr/share/locale/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT
(No such file or directory)
select(4, [0 3], [], NULL, NULL)        = 1 (in [3])
read(3, "SSH-2.0-OpenSSH_5.8p1-hpn13v10\r\n", 1024) = 32
write(1, "SSH-2.0-OpenSSH_5.8p1-hpn13v10\r\n", 32) = 32
select(4, [0 3], [], NULL, NULL)        = ? ERESTARTNOHAND (To be restarted)
--- SIGINT (Interrupt) @ 0 (0) ---
rt_sigreturn(0x7fff83d9826b)            = -1 EINTR (Interrupted system call)
shutdown(3, 2 /* send and receive */)   = 0
close(3)                                = 0
exit_group(0)                           = ?


TEST2:
execve("/usr/bin/netcat", ["netcat", "10.0.0.4", "22"], [/* 55 vars */]) = 0
brk(0)                                  = 0x1081000
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3
setsockopt(3, SOL_SOCKET, SO_LINGER, {onoff=1, linger=0}, 8) = 0
setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
fcntl(3, F_GETFL)                       = 0x2 (flags O_RDWR)
fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK)    = 0
connect(3, {sa_family=AF_INET, sin_port=htons(22),
sin_addr=inet_addr("10.0.0.4")}, 16) = -1 EINPROGRESS (Operation now
in progress)
select(4, NULL, [3], NULL, NULL)        = 1 (out [3])
getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
select(4, [0 3], [], NULL, NULL)        = 1 (in [3])
read(3, "SSH-2.0-OpenSSH_5.8p1-hpn13v10\r\n", 1024) = 32
write(1, "SSH-2.0-OpenSSH_5.8p1-hpn13v10\r\n", 32) = 32
select(4, [0 3], [], NULL, NULL)        = ? ERESTARTNOHAND (To be restarted)
--- SIGINT (Interrupt) @ 0 (0) ---
rt_sigreturn(0x7fff663861ab)            = -1 EINTR (Interrupted system call)
shutdown(3, 2 /* send and receive */)   = 0
close(3)                                = 0
exit_group(0)                           = ?


TEST3:
execve("/usr/bin/netcat", ["netcat", "88.198.116.73", "22"], [/* 54
vars */]) = 0
brk(0)                                  = 0x955b000
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3
setsockopt(3, SOL_SOCKET, SO_LINGER, {onoff=1, linger=0}, 8) = 0
setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
fcntl64(3, F_GETFL)                     = 0x2 (flags O_RDWR)
fcntl64(3, F_SETFL, O_RDWR|O_NONBLOCK)  = 0
connect(3, {sa_family=AF_INET, sin_port=htons(22),
sin_addr=inet_addr("88.198.116.73")}, 16) = -1 EINPROGRESS (Operation
now in progress)
select(4, NULL, [3], NULL, NULL)        = 1 (out [3])
getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
open("/usr/share/locale/locale.alias", O_RDONLY) = 4
fstat64(4, {st_mode=S_IFREG|0644, st_size=2570, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1,
0) = 0xb77d1000
read(4, "# Locale name alias data base.\n#"..., 4096) = 2570
read(4, "", 4096)                       = 0
close(4)                                = 0
munmap(0xb77d1000, 4096)                = 0
select(4, [0 3], [], NULL, NULL)        = 1 (in [3])
read(3, "SSH-2.0-OpenSSH_5.3p1 Debian-3ub"..., 1024) = 39
write(1, "SSH-2.0-OpenSSH_5.3p1 Debian-3ub"..., 39) = 39
select(4, [0 3], [], NULL, NULL)        = ? ERESTARTNOHAND (To be restarted)
--- SIGINT (Interrupt) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
shutdown(3, 2 /* send and receive */)   = 0
close(3)                                = 0
exit_group(0)                           = ?


TEST PC1->Server
execve("/usr/bin/netcat", ["netcat", "88.198.116.73", "22"], [/* 55
vars */]) = 0
brk(0)                                  = 0x10fe000
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3
setsockopt(3, SOL_SOCKET, SO_LINGER, {onoff=1, linger=0}, 8) = 0
setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
fcntl(3, F_GETFL)                       = 0x2 (flags O_RDWR)
fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK)    = 0
connect(3, {sa_family=AF_INET, sin_port=htons(22),
sin_addr=inet_addr("88.198.116.73")}, 16) = -1 EINPROGRESS (Operation
now in progress)
select(4, NULL, [3], NULL, NULL)        = 1 (out [3])
getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
open("/usr/share/locale/locale.alias", O_RDONLY) = 4
fstat(4, {st_mode=S_IFREG|0644, st_size=2570, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1,
0) = 0x7fc6c7a0a000
read(4, "# Locale name alias data base.\n#"..., 4096) = 2570
read(4, "", 4096)                       = 0
close(4)                                = 0
munmap(0x7fc6c7a0a000, 4096)            = 0
select(4, [0 3], [], NULL, NULL)        = ? ERESTARTNOHAND (To be restarted)
--- SIGINT (Interrupt) @ 0 (0) ---
rt_sigreturn(0x7fff13de56ab)            = -1 EINTR (Interrupted system call)
shutdown(3, 2 /* send and receive */)   = 0
close(3)                                = 0
exit_group(0)                           = ?

Alt i alt, syntes jeg det ser meget fornuftig ud. Der er ingen system
kald som fejler, og den gør nogen lunde det samme i de 4 situationer,
så det blev jeg desvære heller ikke meget kloger af.

Jeg har naturligvis de rå strace's, men er ikke sikekr på at det vil hjælpe.

Mit problem her er nu at jeg stadig ikke har fået nogle hints, og jeg
har stadig ikke fået min ssh forbindelse til serveren op og køre.

Så hvis der er nogen som ahr en god mave fornæmelse af hvad der er
galt, eller gode ideer til hvordan man debugger dette så er det meget
velkommen

MVH
Allan W. Nielsen


Follow ups