SSH Shell via SSH Proxy
Clash Royale CLAN TAG#URR8PPP
up vote
3
down vote
favorite
Yes, I'm aware that I wrote "SSH shell" in the title.
TL;DR: The first paragraph, the one with the link, and the one with the error message are most important.
I have my Raspberry Pi at home which I can access over the internet but only via IPv6. I'm currently in a location where I don't have IPv6.
I can execute commands on it by first logging in to a server which has both IPv4 and IPv6 and then logging into my pi from there. However, I use SSH on it for more than executing commands on it:
- git
- backups (Deja Dup)
- accessing files (SFTP)
- VNC (I tunnel through SSH and can then connect to localhost via VNC)
These are in decreasing order of importance. I want to access my git repos.
A few more details:
- I can't simply make my Pi accessible via IPv4. The modem it's behind has an IPv4 address and an IPv6 subnet but I have to use hardware I didn't choose running software I can't change. That software is not only buggy and I can't even take a look at it, but furthermore, it doesn't allow IPv4 port forwarding it all.
- I don't control the server with both IPv4 and IPv6 on it. I only have a normal user account on it and can't â for example â install new software if more than standard user rights are required for it.
Googling for a solution brought up this rather promising page. And it actually works for git. I set up new remotes for the repos I'm using, simply replacing the pi's domain name by localhost:3333
.
But it looks much more promising than that. It looks the the solution for all of the above. And it kind of started to work out!
SFTP works and I can't really determine whether backups via Deja Dup work, yet, because my connection is too slow but is hasn't failed, yet and something's causing network traffic, so that's good and promising.
But why can't I just do shh localhost:3333
to connect to my laptop to get a shell on my pi? The command results in this error message:
ssh: Could not resolve hostname localhost:3333: Name or service not known
I'm mainly interested in why I can't get a shell the way I'd expect it to work.
ssh ssh-tunneling
add a comment |Â
up vote
3
down vote
favorite
Yes, I'm aware that I wrote "SSH shell" in the title.
TL;DR: The first paragraph, the one with the link, and the one with the error message are most important.
I have my Raspberry Pi at home which I can access over the internet but only via IPv6. I'm currently in a location where I don't have IPv6.
I can execute commands on it by first logging in to a server which has both IPv4 and IPv6 and then logging into my pi from there. However, I use SSH on it for more than executing commands on it:
- git
- backups (Deja Dup)
- accessing files (SFTP)
- VNC (I tunnel through SSH and can then connect to localhost via VNC)
These are in decreasing order of importance. I want to access my git repos.
A few more details:
- I can't simply make my Pi accessible via IPv4. The modem it's behind has an IPv4 address and an IPv6 subnet but I have to use hardware I didn't choose running software I can't change. That software is not only buggy and I can't even take a look at it, but furthermore, it doesn't allow IPv4 port forwarding it all.
- I don't control the server with both IPv4 and IPv6 on it. I only have a normal user account on it and can't â for example â install new software if more than standard user rights are required for it.
Googling for a solution brought up this rather promising page. And it actually works for git. I set up new remotes for the repos I'm using, simply replacing the pi's domain name by localhost:3333
.
But it looks much more promising than that. It looks the the solution for all of the above. And it kind of started to work out!
SFTP works and I can't really determine whether backups via Deja Dup work, yet, because my connection is too slow but is hasn't failed, yet and something's causing network traffic, so that's good and promising.
But why can't I just do shh localhost:3333
to connect to my laptop to get a shell on my pi? The command results in this error message:
ssh: Could not resolve hostname localhost:3333: Name or service not known
I'm mainly interested in why I can't get a shell the way I'd expect it to work.
ssh ssh-tunneling
1
shh localhost:3333
:ssh
does not support this semantics. It isssh -p 3333 localhost
if it is the question (didn't read it all).
â Jakuje
Dec 27 '16 at 16:47
@Jakuje Yes, that's it. Thanks!
â UTF-8
Dec 27 '16 at 16:50
add a comment |Â
up vote
3
down vote
favorite
up vote
3
down vote
favorite
Yes, I'm aware that I wrote "SSH shell" in the title.
TL;DR: The first paragraph, the one with the link, and the one with the error message are most important.
I have my Raspberry Pi at home which I can access over the internet but only via IPv6. I'm currently in a location where I don't have IPv6.
I can execute commands on it by first logging in to a server which has both IPv4 and IPv6 and then logging into my pi from there. However, I use SSH on it for more than executing commands on it:
- git
- backups (Deja Dup)
- accessing files (SFTP)
- VNC (I tunnel through SSH and can then connect to localhost via VNC)
These are in decreasing order of importance. I want to access my git repos.
A few more details:
- I can't simply make my Pi accessible via IPv4. The modem it's behind has an IPv4 address and an IPv6 subnet but I have to use hardware I didn't choose running software I can't change. That software is not only buggy and I can't even take a look at it, but furthermore, it doesn't allow IPv4 port forwarding it all.
- I don't control the server with both IPv4 and IPv6 on it. I only have a normal user account on it and can't â for example â install new software if more than standard user rights are required for it.
Googling for a solution brought up this rather promising page. And it actually works for git. I set up new remotes for the repos I'm using, simply replacing the pi's domain name by localhost:3333
.
But it looks much more promising than that. It looks the the solution for all of the above. And it kind of started to work out!
SFTP works and I can't really determine whether backups via Deja Dup work, yet, because my connection is too slow but is hasn't failed, yet and something's causing network traffic, so that's good and promising.
But why can't I just do shh localhost:3333
to connect to my laptop to get a shell on my pi? The command results in this error message:
ssh: Could not resolve hostname localhost:3333: Name or service not known
I'm mainly interested in why I can't get a shell the way I'd expect it to work.
ssh ssh-tunneling
Yes, I'm aware that I wrote "SSH shell" in the title.
TL;DR: The first paragraph, the one with the link, and the one with the error message are most important.
I have my Raspberry Pi at home which I can access over the internet but only via IPv6. I'm currently in a location where I don't have IPv6.
I can execute commands on it by first logging in to a server which has both IPv4 and IPv6 and then logging into my pi from there. However, I use SSH on it for more than executing commands on it:
- git
- backups (Deja Dup)
- accessing files (SFTP)
- VNC (I tunnel through SSH and can then connect to localhost via VNC)
These are in decreasing order of importance. I want to access my git repos.
A few more details:
- I can't simply make my Pi accessible via IPv4. The modem it's behind has an IPv4 address and an IPv6 subnet but I have to use hardware I didn't choose running software I can't change. That software is not only buggy and I can't even take a look at it, but furthermore, it doesn't allow IPv4 port forwarding it all.
- I don't control the server with both IPv4 and IPv6 on it. I only have a normal user account on it and can't â for example â install new software if more than standard user rights are required for it.
Googling for a solution brought up this rather promising page. And it actually works for git. I set up new remotes for the repos I'm using, simply replacing the pi's domain name by localhost:3333
.
But it looks much more promising than that. It looks the the solution for all of the above. And it kind of started to work out!
SFTP works and I can't really determine whether backups via Deja Dup work, yet, because my connection is too slow but is hasn't failed, yet and something's causing network traffic, so that's good and promising.
But why can't I just do shh localhost:3333
to connect to my laptop to get a shell on my pi? The command results in this error message:
ssh: Could not resolve hostname localhost:3333: Name or service not known
I'm mainly interested in why I can't get a shell the way I'd expect it to work.
ssh ssh-tunneling
ssh ssh-tunneling
edited Dec 28 '16 at 23:13
asked Dec 27 '16 at 16:26
UTF-8
1,173723
1,173723
1
shh localhost:3333
:ssh
does not support this semantics. It isssh -p 3333 localhost
if it is the question (didn't read it all).
â Jakuje
Dec 27 '16 at 16:47
@Jakuje Yes, that's it. Thanks!
â UTF-8
Dec 27 '16 at 16:50
add a comment |Â
1
shh localhost:3333
:ssh
does not support this semantics. It isssh -p 3333 localhost
if it is the question (didn't read it all).
â Jakuje
Dec 27 '16 at 16:47
@Jakuje Yes, that's it. Thanks!
â UTF-8
Dec 27 '16 at 16:50
1
1
shh localhost:3333
: ssh
does not support this semantics. It is ssh -p 3333 localhost
if it is the question (didn't read it all).â Jakuje
Dec 27 '16 at 16:47
shh localhost:3333
: ssh
does not support this semantics. It is ssh -p 3333 localhost
if it is the question (didn't read it all).â Jakuje
Dec 27 '16 at 16:47
@Jakuje Yes, that's it. Thanks!
â UTF-8
Dec 27 '16 at 16:50
@Jakuje Yes, that's it. Thanks!
â UTF-8
Dec 27 '16 at 16:50
add a comment |Â
2 Answers
2
active
oldest
votes
up vote
5
down vote
accepted
You might want to look into ssh
's ProxyCommand
configuration, which allows for this to work more seamlessly, and will work for shells, SFTP, tunnels, and anything else you might want to proxy via ssh.
Let's say you have the following three hosts:
workstation.example.com
- This is the machine you're physically working onproxy.example.com
- This is the machine you're routing your SSH traffic throughendpoint.example.com
- This is where you want the traffic to ultimately end up
In ~/.ssh/config
on workstation
, add the following:
Host endpoint
User EndpointUser # set this to the username on the destination host
HostName endpoint.example.com
ProxyCommand ssh username@proxy.example.com nc %h %p 2> /dev/null
On the proxy
host, make sure nc
(netcat) is installed.
Then, on workstation
, you can ssh endpoint
or sftp endpoint
and you will be transparently proxied to the machine by way of your proxy host.
One thing for Ubuntu users (and I suppose other distros as well): You don't need the packagenetcat
.nc
is probably already installed. In Ubuntu 16.04, it's already installed via the packagenetcat-openbsd
.
â UTF-8
Dec 27 '16 at 16:45
Awesome, it works! I can even use a different SSH alias I already defined instead ofusername@proxy.example.com
. :) Can you tell my whyshh localhost:3333
doesn't work, though?
â UTF-8
Dec 27 '16 at 16:45
2
Don't usenetcat
. Usessh -W %h:%p username@proxy.example.com
instead. It does not require anything else installed.
â Jakuje
Dec 27 '16 at 16:48
1
Sure!shh localhost:3333
is not valid syntax tossh
to a specified port. It will literally look for a host or alias calledlocalhost:3333
. You'd want to usessh -p 3333 localhost
, and that would have to be to an SSH server.
â DopeGhoti
Dec 27 '16 at 16:48
@Jakuje, thanks for that! Is-W
new? I've not seen that before. Also, will that work if you have a different username on the other host?
â DopeGhoti
Dec 27 '16 at 16:51
 |Â
show 2 more comments
up vote
0
down vote
There are a couple of pieces which can be cobbled together in different ways, depending on what works best for you. Each piece is optional, and has variants.
I will use the following terms:
- "desktop" => the machine you are seated in front of (in your example, the one with ipv4).
- "jump host" => the machine in the middle, the one you have to go through (in your example, with ipv4 & ipv6)
"target" => the final machine you actually want to be on (in your case, the Pi).
- consider using ssh keys, instead of passwords. This will save you a lot of time typing in passwords. See https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2
- Make sure you can ssh directly to the jumphost with 'ssh jumphostname' or 'ssh jumpuser@jumphostname' - if there are any other options you need to connect (port number etc), add an entry to your ~/.ssh/config for this jumphost.
- Add an entry to ~/.ssh/config for the target, with a clause 'ProxyJump jumphostname' or 'ProxyJump jumpuser@jumphostname'.
- If you sometimes access the target directly, and sometimes via a jumphost (e.g. 'desktop' is a laptop which you sometimes use at home, and sometimes at work), you can give the target and/or jumphost a different name (e.g. 'Host jump-pi' or 'Host jump-proxy'), and specify the real hostname or ip of the target in the 'hostname' clause.
- You should now be able to ssh directly from your desktop to the pi. Behind the scenes, ssh will create a connection from your desktop to the jump host, and then start another connection directly from your desktop through that first connection, to the target.
- You can add port forwards to the ssh command (or add it to your ssh config). For example, if you want your pi to be able to access ssh on your desktop, pick a port to listen to on the pi (I will pick 2222), and run the commands as follows: "ssh -R2222:localhost:22 piusername@pi" - this says, after ssh connects, any incoming connections to port 2222 (on the pi), should be forwarded back through the tunnel to your desktop, which should then connect to "localhost port 22". Then, on the pi, you can "ssh -p 2222 desktopuser@localhost". You can do the same for any other single port (provided you can specify the hostname and port for the program you are using).
- If you want to have general networking, you can run Dynamic Socks. ssh has this built in, but it only works in the OTHER direction. To allow connections going BACK (from the Pi to your desktop), you will need a Dynamic Socks server on your desktop. Then set up a tcp connection from the Pi to the Dynamic Socks server (as per step 6), then run a Dynamic Socks client on the Pi (some applications have Dynamic Socks built in, e.g. wget, or you can use something like 'tsocks').
- If this is not generic enough, run PPP over ssh. This will give you another "network card" on both your desktop and the Pi, they can then talk to each other directly. You can set up routing via this interface (be careful, if you lose connectivity to the Pi, you won't be able to fix it remotely).
- consider using ssh keys, instead of passwords. This will save you a lot of time typing in passwords. See https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2
add a comment |Â
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
5
down vote
accepted
You might want to look into ssh
's ProxyCommand
configuration, which allows for this to work more seamlessly, and will work for shells, SFTP, tunnels, and anything else you might want to proxy via ssh.
Let's say you have the following three hosts:
workstation.example.com
- This is the machine you're physically working onproxy.example.com
- This is the machine you're routing your SSH traffic throughendpoint.example.com
- This is where you want the traffic to ultimately end up
In ~/.ssh/config
on workstation
, add the following:
Host endpoint
User EndpointUser # set this to the username on the destination host
HostName endpoint.example.com
ProxyCommand ssh username@proxy.example.com nc %h %p 2> /dev/null
On the proxy
host, make sure nc
(netcat) is installed.
Then, on workstation
, you can ssh endpoint
or sftp endpoint
and you will be transparently proxied to the machine by way of your proxy host.
One thing for Ubuntu users (and I suppose other distros as well): You don't need the packagenetcat
.nc
is probably already installed. In Ubuntu 16.04, it's already installed via the packagenetcat-openbsd
.
â UTF-8
Dec 27 '16 at 16:45
Awesome, it works! I can even use a different SSH alias I already defined instead ofusername@proxy.example.com
. :) Can you tell my whyshh localhost:3333
doesn't work, though?
â UTF-8
Dec 27 '16 at 16:45
2
Don't usenetcat
. Usessh -W %h:%p username@proxy.example.com
instead. It does not require anything else installed.
â Jakuje
Dec 27 '16 at 16:48
1
Sure!shh localhost:3333
is not valid syntax tossh
to a specified port. It will literally look for a host or alias calledlocalhost:3333
. You'd want to usessh -p 3333 localhost
, and that would have to be to an SSH server.
â DopeGhoti
Dec 27 '16 at 16:48
@Jakuje, thanks for that! Is-W
new? I've not seen that before. Also, will that work if you have a different username on the other host?
â DopeGhoti
Dec 27 '16 at 16:51
 |Â
show 2 more comments
up vote
5
down vote
accepted
You might want to look into ssh
's ProxyCommand
configuration, which allows for this to work more seamlessly, and will work for shells, SFTP, tunnels, and anything else you might want to proxy via ssh.
Let's say you have the following three hosts:
workstation.example.com
- This is the machine you're physically working onproxy.example.com
- This is the machine you're routing your SSH traffic throughendpoint.example.com
- This is where you want the traffic to ultimately end up
In ~/.ssh/config
on workstation
, add the following:
Host endpoint
User EndpointUser # set this to the username on the destination host
HostName endpoint.example.com
ProxyCommand ssh username@proxy.example.com nc %h %p 2> /dev/null
On the proxy
host, make sure nc
(netcat) is installed.
Then, on workstation
, you can ssh endpoint
or sftp endpoint
and you will be transparently proxied to the machine by way of your proxy host.
One thing for Ubuntu users (and I suppose other distros as well): You don't need the packagenetcat
.nc
is probably already installed. In Ubuntu 16.04, it's already installed via the packagenetcat-openbsd
.
â UTF-8
Dec 27 '16 at 16:45
Awesome, it works! I can even use a different SSH alias I already defined instead ofusername@proxy.example.com
. :) Can you tell my whyshh localhost:3333
doesn't work, though?
â UTF-8
Dec 27 '16 at 16:45
2
Don't usenetcat
. Usessh -W %h:%p username@proxy.example.com
instead. It does not require anything else installed.
â Jakuje
Dec 27 '16 at 16:48
1
Sure!shh localhost:3333
is not valid syntax tossh
to a specified port. It will literally look for a host or alias calledlocalhost:3333
. You'd want to usessh -p 3333 localhost
, and that would have to be to an SSH server.
â DopeGhoti
Dec 27 '16 at 16:48
@Jakuje, thanks for that! Is-W
new? I've not seen that before. Also, will that work if you have a different username on the other host?
â DopeGhoti
Dec 27 '16 at 16:51
 |Â
show 2 more comments
up vote
5
down vote
accepted
up vote
5
down vote
accepted
You might want to look into ssh
's ProxyCommand
configuration, which allows for this to work more seamlessly, and will work for shells, SFTP, tunnels, and anything else you might want to proxy via ssh.
Let's say you have the following three hosts:
workstation.example.com
- This is the machine you're physically working onproxy.example.com
- This is the machine you're routing your SSH traffic throughendpoint.example.com
- This is where you want the traffic to ultimately end up
In ~/.ssh/config
on workstation
, add the following:
Host endpoint
User EndpointUser # set this to the username on the destination host
HostName endpoint.example.com
ProxyCommand ssh username@proxy.example.com nc %h %p 2> /dev/null
On the proxy
host, make sure nc
(netcat) is installed.
Then, on workstation
, you can ssh endpoint
or sftp endpoint
and you will be transparently proxied to the machine by way of your proxy host.
You might want to look into ssh
's ProxyCommand
configuration, which allows for this to work more seamlessly, and will work for shells, SFTP, tunnels, and anything else you might want to proxy via ssh.
Let's say you have the following three hosts:
workstation.example.com
- This is the machine you're physically working onproxy.example.com
- This is the machine you're routing your SSH traffic throughendpoint.example.com
- This is where you want the traffic to ultimately end up
In ~/.ssh/config
on workstation
, add the following:
Host endpoint
User EndpointUser # set this to the username on the destination host
HostName endpoint.example.com
ProxyCommand ssh username@proxy.example.com nc %h %p 2> /dev/null
On the proxy
host, make sure nc
(netcat) is installed.
Then, on workstation
, you can ssh endpoint
or sftp endpoint
and you will be transparently proxied to the machine by way of your proxy host.
edited Apr 3 '17 at 16:14
answered Dec 27 '16 at 16:34
DopeGhoti
41.5k55180
41.5k55180
One thing for Ubuntu users (and I suppose other distros as well): You don't need the packagenetcat
.nc
is probably already installed. In Ubuntu 16.04, it's already installed via the packagenetcat-openbsd
.
â UTF-8
Dec 27 '16 at 16:45
Awesome, it works! I can even use a different SSH alias I already defined instead ofusername@proxy.example.com
. :) Can you tell my whyshh localhost:3333
doesn't work, though?
â UTF-8
Dec 27 '16 at 16:45
2
Don't usenetcat
. Usessh -W %h:%p username@proxy.example.com
instead. It does not require anything else installed.
â Jakuje
Dec 27 '16 at 16:48
1
Sure!shh localhost:3333
is not valid syntax tossh
to a specified port. It will literally look for a host or alias calledlocalhost:3333
. You'd want to usessh -p 3333 localhost
, and that would have to be to an SSH server.
â DopeGhoti
Dec 27 '16 at 16:48
@Jakuje, thanks for that! Is-W
new? I've not seen that before. Also, will that work if you have a different username on the other host?
â DopeGhoti
Dec 27 '16 at 16:51
 |Â
show 2 more comments
One thing for Ubuntu users (and I suppose other distros as well): You don't need the packagenetcat
.nc
is probably already installed. In Ubuntu 16.04, it's already installed via the packagenetcat-openbsd
.
â UTF-8
Dec 27 '16 at 16:45
Awesome, it works! I can even use a different SSH alias I already defined instead ofusername@proxy.example.com
. :) Can you tell my whyshh localhost:3333
doesn't work, though?
â UTF-8
Dec 27 '16 at 16:45
2
Don't usenetcat
. Usessh -W %h:%p username@proxy.example.com
instead. It does not require anything else installed.
â Jakuje
Dec 27 '16 at 16:48
1
Sure!shh localhost:3333
is not valid syntax tossh
to a specified port. It will literally look for a host or alias calledlocalhost:3333
. You'd want to usessh -p 3333 localhost
, and that would have to be to an SSH server.
â DopeGhoti
Dec 27 '16 at 16:48
@Jakuje, thanks for that! Is-W
new? I've not seen that before. Also, will that work if you have a different username on the other host?
â DopeGhoti
Dec 27 '16 at 16:51
One thing for Ubuntu users (and I suppose other distros as well): You don't need the package
netcat
. nc
is probably already installed. In Ubuntu 16.04, it's already installed via the package netcat-openbsd
.â UTF-8
Dec 27 '16 at 16:45
One thing for Ubuntu users (and I suppose other distros as well): You don't need the package
netcat
. nc
is probably already installed. In Ubuntu 16.04, it's already installed via the package netcat-openbsd
.â UTF-8
Dec 27 '16 at 16:45
Awesome, it works! I can even use a different SSH alias I already defined instead of
username@proxy.example.com
. :) Can you tell my why shh localhost:3333
doesn't work, though?â UTF-8
Dec 27 '16 at 16:45
Awesome, it works! I can even use a different SSH alias I already defined instead of
username@proxy.example.com
. :) Can you tell my why shh localhost:3333
doesn't work, though?â UTF-8
Dec 27 '16 at 16:45
2
2
Don't use
netcat
. Use ssh -W %h:%p username@proxy.example.com
instead. It does not require anything else installed.â Jakuje
Dec 27 '16 at 16:48
Don't use
netcat
. Use ssh -W %h:%p username@proxy.example.com
instead. It does not require anything else installed.â Jakuje
Dec 27 '16 at 16:48
1
1
Sure!
shh localhost:3333
is not valid syntax to ssh
to a specified port. It will literally look for a host or alias called localhost:3333
. You'd want to use ssh -p 3333 localhost
, and that would have to be to an SSH server.â DopeGhoti
Dec 27 '16 at 16:48
Sure!
shh localhost:3333
is not valid syntax to ssh
to a specified port. It will literally look for a host or alias called localhost:3333
. You'd want to use ssh -p 3333 localhost
, and that would have to be to an SSH server.â DopeGhoti
Dec 27 '16 at 16:48
@Jakuje, thanks for that! Is
-W
new? I've not seen that before. Also, will that work if you have a different username on the other host?â DopeGhoti
Dec 27 '16 at 16:51
@Jakuje, thanks for that! Is
-W
new? I've not seen that before. Also, will that work if you have a different username on the other host?â DopeGhoti
Dec 27 '16 at 16:51
 |Â
show 2 more comments
up vote
0
down vote
There are a couple of pieces which can be cobbled together in different ways, depending on what works best for you. Each piece is optional, and has variants.
I will use the following terms:
- "desktop" => the machine you are seated in front of (in your example, the one with ipv4).
- "jump host" => the machine in the middle, the one you have to go through (in your example, with ipv4 & ipv6)
"target" => the final machine you actually want to be on (in your case, the Pi).
- consider using ssh keys, instead of passwords. This will save you a lot of time typing in passwords. See https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2
- Make sure you can ssh directly to the jumphost with 'ssh jumphostname' or 'ssh jumpuser@jumphostname' - if there are any other options you need to connect (port number etc), add an entry to your ~/.ssh/config for this jumphost.
- Add an entry to ~/.ssh/config for the target, with a clause 'ProxyJump jumphostname' or 'ProxyJump jumpuser@jumphostname'.
- If you sometimes access the target directly, and sometimes via a jumphost (e.g. 'desktop' is a laptop which you sometimes use at home, and sometimes at work), you can give the target and/or jumphost a different name (e.g. 'Host jump-pi' or 'Host jump-proxy'), and specify the real hostname or ip of the target in the 'hostname' clause.
- You should now be able to ssh directly from your desktop to the pi. Behind the scenes, ssh will create a connection from your desktop to the jump host, and then start another connection directly from your desktop through that first connection, to the target.
- You can add port forwards to the ssh command (or add it to your ssh config). For example, if you want your pi to be able to access ssh on your desktop, pick a port to listen to on the pi (I will pick 2222), and run the commands as follows: "ssh -R2222:localhost:22 piusername@pi" - this says, after ssh connects, any incoming connections to port 2222 (on the pi), should be forwarded back through the tunnel to your desktop, which should then connect to "localhost port 22". Then, on the pi, you can "ssh -p 2222 desktopuser@localhost". You can do the same for any other single port (provided you can specify the hostname and port for the program you are using).
- If you want to have general networking, you can run Dynamic Socks. ssh has this built in, but it only works in the OTHER direction. To allow connections going BACK (from the Pi to your desktop), you will need a Dynamic Socks server on your desktop. Then set up a tcp connection from the Pi to the Dynamic Socks server (as per step 6), then run a Dynamic Socks client on the Pi (some applications have Dynamic Socks built in, e.g. wget, or you can use something like 'tsocks').
- If this is not generic enough, run PPP over ssh. This will give you another "network card" on both your desktop and the Pi, they can then talk to each other directly. You can set up routing via this interface (be careful, if you lose connectivity to the Pi, you won't be able to fix it remotely).
- consider using ssh keys, instead of passwords. This will save you a lot of time typing in passwords. See https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2
add a comment |Â
up vote
0
down vote
There are a couple of pieces which can be cobbled together in different ways, depending on what works best for you. Each piece is optional, and has variants.
I will use the following terms:
- "desktop" => the machine you are seated in front of (in your example, the one with ipv4).
- "jump host" => the machine in the middle, the one you have to go through (in your example, with ipv4 & ipv6)
"target" => the final machine you actually want to be on (in your case, the Pi).
- consider using ssh keys, instead of passwords. This will save you a lot of time typing in passwords. See https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2
- Make sure you can ssh directly to the jumphost with 'ssh jumphostname' or 'ssh jumpuser@jumphostname' - if there are any other options you need to connect (port number etc), add an entry to your ~/.ssh/config for this jumphost.
- Add an entry to ~/.ssh/config for the target, with a clause 'ProxyJump jumphostname' or 'ProxyJump jumpuser@jumphostname'.
- If you sometimes access the target directly, and sometimes via a jumphost (e.g. 'desktop' is a laptop which you sometimes use at home, and sometimes at work), you can give the target and/or jumphost a different name (e.g. 'Host jump-pi' or 'Host jump-proxy'), and specify the real hostname or ip of the target in the 'hostname' clause.
- You should now be able to ssh directly from your desktop to the pi. Behind the scenes, ssh will create a connection from your desktop to the jump host, and then start another connection directly from your desktop through that first connection, to the target.
- You can add port forwards to the ssh command (or add it to your ssh config). For example, if you want your pi to be able to access ssh on your desktop, pick a port to listen to on the pi (I will pick 2222), and run the commands as follows: "ssh -R2222:localhost:22 piusername@pi" - this says, after ssh connects, any incoming connections to port 2222 (on the pi), should be forwarded back through the tunnel to your desktop, which should then connect to "localhost port 22". Then, on the pi, you can "ssh -p 2222 desktopuser@localhost". You can do the same for any other single port (provided you can specify the hostname and port for the program you are using).
- If you want to have general networking, you can run Dynamic Socks. ssh has this built in, but it only works in the OTHER direction. To allow connections going BACK (from the Pi to your desktop), you will need a Dynamic Socks server on your desktop. Then set up a tcp connection from the Pi to the Dynamic Socks server (as per step 6), then run a Dynamic Socks client on the Pi (some applications have Dynamic Socks built in, e.g. wget, or you can use something like 'tsocks').
- If this is not generic enough, run PPP over ssh. This will give you another "network card" on both your desktop and the Pi, they can then talk to each other directly. You can set up routing via this interface (be careful, if you lose connectivity to the Pi, you won't be able to fix it remotely).
- consider using ssh keys, instead of passwords. This will save you a lot of time typing in passwords. See https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2
add a comment |Â
up vote
0
down vote
up vote
0
down vote
There are a couple of pieces which can be cobbled together in different ways, depending on what works best for you. Each piece is optional, and has variants.
I will use the following terms:
- "desktop" => the machine you are seated in front of (in your example, the one with ipv4).
- "jump host" => the machine in the middle, the one you have to go through (in your example, with ipv4 & ipv6)
"target" => the final machine you actually want to be on (in your case, the Pi).
- consider using ssh keys, instead of passwords. This will save you a lot of time typing in passwords. See https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2
- Make sure you can ssh directly to the jumphost with 'ssh jumphostname' or 'ssh jumpuser@jumphostname' - if there are any other options you need to connect (port number etc), add an entry to your ~/.ssh/config for this jumphost.
- Add an entry to ~/.ssh/config for the target, with a clause 'ProxyJump jumphostname' or 'ProxyJump jumpuser@jumphostname'.
- If you sometimes access the target directly, and sometimes via a jumphost (e.g. 'desktop' is a laptop which you sometimes use at home, and sometimes at work), you can give the target and/or jumphost a different name (e.g. 'Host jump-pi' or 'Host jump-proxy'), and specify the real hostname or ip of the target in the 'hostname' clause.
- You should now be able to ssh directly from your desktop to the pi. Behind the scenes, ssh will create a connection from your desktop to the jump host, and then start another connection directly from your desktop through that first connection, to the target.
- You can add port forwards to the ssh command (or add it to your ssh config). For example, if you want your pi to be able to access ssh on your desktop, pick a port to listen to on the pi (I will pick 2222), and run the commands as follows: "ssh -R2222:localhost:22 piusername@pi" - this says, after ssh connects, any incoming connections to port 2222 (on the pi), should be forwarded back through the tunnel to your desktop, which should then connect to "localhost port 22". Then, on the pi, you can "ssh -p 2222 desktopuser@localhost". You can do the same for any other single port (provided you can specify the hostname and port for the program you are using).
- If you want to have general networking, you can run Dynamic Socks. ssh has this built in, but it only works in the OTHER direction. To allow connections going BACK (from the Pi to your desktop), you will need a Dynamic Socks server on your desktop. Then set up a tcp connection from the Pi to the Dynamic Socks server (as per step 6), then run a Dynamic Socks client on the Pi (some applications have Dynamic Socks built in, e.g. wget, or you can use something like 'tsocks').
- If this is not generic enough, run PPP over ssh. This will give you another "network card" on both your desktop and the Pi, they can then talk to each other directly. You can set up routing via this interface (be careful, if you lose connectivity to the Pi, you won't be able to fix it remotely).
- consider using ssh keys, instead of passwords. This will save you a lot of time typing in passwords. See https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2
There are a couple of pieces which can be cobbled together in different ways, depending on what works best for you. Each piece is optional, and has variants.
I will use the following terms:
- "desktop" => the machine you are seated in front of (in your example, the one with ipv4).
- "jump host" => the machine in the middle, the one you have to go through (in your example, with ipv4 & ipv6)
"target" => the final machine you actually want to be on (in your case, the Pi).
- consider using ssh keys, instead of passwords. This will save you a lot of time typing in passwords. See https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2
- Make sure you can ssh directly to the jumphost with 'ssh jumphostname' or 'ssh jumpuser@jumphostname' - if there are any other options you need to connect (port number etc), add an entry to your ~/.ssh/config for this jumphost.
- Add an entry to ~/.ssh/config for the target, with a clause 'ProxyJump jumphostname' or 'ProxyJump jumpuser@jumphostname'.
- If you sometimes access the target directly, and sometimes via a jumphost (e.g. 'desktop' is a laptop which you sometimes use at home, and sometimes at work), you can give the target and/or jumphost a different name (e.g. 'Host jump-pi' or 'Host jump-proxy'), and specify the real hostname or ip of the target in the 'hostname' clause.
- You should now be able to ssh directly from your desktop to the pi. Behind the scenes, ssh will create a connection from your desktop to the jump host, and then start another connection directly from your desktop through that first connection, to the target.
- You can add port forwards to the ssh command (or add it to your ssh config). For example, if you want your pi to be able to access ssh on your desktop, pick a port to listen to on the pi (I will pick 2222), and run the commands as follows: "ssh -R2222:localhost:22 piusername@pi" - this says, after ssh connects, any incoming connections to port 2222 (on the pi), should be forwarded back through the tunnel to your desktop, which should then connect to "localhost port 22". Then, on the pi, you can "ssh -p 2222 desktopuser@localhost". You can do the same for any other single port (provided you can specify the hostname and port for the program you are using).
- If you want to have general networking, you can run Dynamic Socks. ssh has this built in, but it only works in the OTHER direction. To allow connections going BACK (from the Pi to your desktop), you will need a Dynamic Socks server on your desktop. Then set up a tcp connection from the Pi to the Dynamic Socks server (as per step 6), then run a Dynamic Socks client on the Pi (some applications have Dynamic Socks built in, e.g. wget, or you can use something like 'tsocks').
- If this is not generic enough, run PPP over ssh. This will give you another "network card" on both your desktop and the Pi, they can then talk to each other directly. You can set up routing via this interface (be careful, if you lose connectivity to the Pi, you won't be able to fix it remotely).
- consider using ssh keys, instead of passwords. This will save you a lot of time typing in passwords. See https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2
answered Oct 3 at 21:54
AMADANON Inc.
706410
706410
add a comment |Â
add a comment |Â
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f333050%2fssh-shell-via-ssh-proxy%23new-answer', 'question_page');
);
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
1
shh localhost:3333
:ssh
does not support this semantics. It isssh -p 3333 localhost
if it is the question (didn't read it all).â Jakuje
Dec 27 '16 at 16:47
@Jakuje Yes, that's it. Thanks!
â UTF-8
Dec 27 '16 at 16:50