Ssh: Difference between revisions
m (→HOWTO) |
|||
(11 intermediate revisions by the same user not shown) | |||
Line 4: | Line 4: | ||
*[http://blog.joncairns.com/2013/12/understanding-ssh-agent-and-ssh-add/ Understanding ssh-agent and ssh-add] | *[http://blog.joncairns.com/2013/12/understanding-ssh-agent-and-ssh-add/ Understanding ssh-agent and ssh-add] | ||
*[https://www.ssh.com/ssh/key/ https://www.ssh.com/ssh/key/] | *[https://www.ssh.com/ssh/key/ https://www.ssh.com/ssh/key/] | ||
*[https://www.baeldung.com/linux/ssh-authentication-methods SSH supported authentication methods] | |||
=HOWTO= | =HOWTO= | ||
Line 73: | Line 71: | ||
Remember to enable '''GatewayPorts''' on '''S''' and to allow access to port 1234 | Remember to enable '''GatewayPorts''' on '''S''' and to allow access to port 1234 | ||
===Systemd service for reverse tunnel=== | |||
[Unit] | |||
Description=SSH Tunnel | |||
After=network.target | |||
[Service] | |||
Restart=always | |||
RestartSec=20 | |||
User=root | |||
ExecStart=/bin/ssh -p 2222 -o ServerAliveInterval=30 -o ServerAliveCountMax=6 -o ExitOnForwardFailure=yes -gNR :10022:localhost:22 user@example.com | |||
[Install] | |||
WantedBy=multi-user.target | |||
So to ssh to remote server you use | |||
ssh -p 10020 localhost | |||
==Copy public key to authorized_keys== | ==Copy public key to authorized_keys== | ||
Line 92: | Line 109: | ||
#/usr/bin/gnome-terminal -e "$protocol $machine" | #/usr/bin/gnome-terminal -e "$protocol $machine" | ||
In about:config set network.protocol-handler.app.ssh to ~/runssh | In about:config set network.protocol-handler.app.ssh to ~/runssh | ||
==scp via intermediate host== | |||
scp -oProxyJump=intermediate thefile user@destination:/tmp | |||
= FAQ = | = FAQ = | ||
Line 111: | Line 132: | ||
Match Address 192.168.1.100 | Match Address 192.168.1.100 | ||
PermitRootLogin yes | PermitRootLogin yes | ||
==The agent has no identities.== | |||
== multihop tunnel == | == multihop tunnel == | ||
Line 149: | Line 174: | ||
passing old cipher, like -o arcfour?? | passing old cipher, like -o arcfour?? | ||
==no matching host key type found | ==no matching host key type found. their offer: ssh-rsa:== | ||
their offer: ssh-rsa: | In your ~/ssh/config try | ||
HostkeyAlgorithms +ssh-rsa | HostkeyAlgorithms +ssh-rsa | ||
and maybe | and maybe | ||
Line 157: | Line 182: | ||
in .ssh/config | in .ssh/config | ||
== scp: no matching key exchange method found. == | ==Error messages== | ||
=== scp: no matching key exchange method found. === | |||
scp seems to ignore .ssh/config, so use | scp seems to ignore .ssh/config, so use | ||
Line 165: | Line 190: | ||
scp -o Ciphers=xxx | scp -o Ciphers=xxx | ||
=== scp: Received message too long === | |||
Something about defaulting to sftp and messing up forced commands expecting scp | |||
Try | |||
scp -O | |||
== kex_exchange_identification: read: Connection reset by peer == | === kex_exchange_identification: read: Connection reset by peer === | ||
only way to find out about that is look on server | only way to find out about that is look on server | ||
=== bad ownership or modes for file authorized_keys === | |||
chmod 600 ~/.ssh/authorized_keys | |||
== Reverse tunnel with autossh == | == Reverse tunnel with autossh == | ||
Line 206: | Line 238: | ||
# do not just set to no! | # do not just set to no! | ||
#PasswordAuthentication yes | #PasswordAuthentication yes | ||
Or for just one user | |||
Match User someuser | |||
AuthenticationMethods "publickey,password" | |||
== add your key to remote authorized_keys == | == add your key to remote authorized_keys == | ||
Line 228: | Line 264: | ||
When using pubkey: | When using pubkey: | ||
ssh -o PubkeyAuthentication=no -o PreferredAuthentications=password | ssh -o PubkeyAuthentication=no -o PreferredAuthentications=password | ||
==Permission denied (publickey).== | |||
Not much you can do on client side, server will probably have | |||
PasswordAuthentication yes | |||
so find an allowed key | |||
==Connection closed by authenticating user== |
Latest revision as of 18:31, 3 November 2024
Links
- Understanding ssh-agent and ssh-add
- https://www.ssh.com/ssh/key/
- SSH supported authentication methods
HOWTO
chrooted sftp
Homedir as defined in /etc/passwd /home/someuser
chmod 755 /home/someuser chown root.root /home/someuser
And then create writable dir for user:
mkdir /home/someuser/downloads chown someuser.someuser /home/someuser/downloads
Subsystem sftp internal-sftp
Per group:
/etc/ssh/sshd_config
Match Group sftponly ChrootDirectory %h ForceCommand internal-sftp AllowTcpForwarding no PermitTunnel no X11Forwarding no
#Remember this one to close Match block! Match all
Per user:
Match User username ChrootDirectory %h ForceCommand internal-sftp AllowTcpForwarding no PermitTunnel no X11Forwarding no #Remember this one to close Match block! Match all
The ChrootDirectory must be owned by root.root with permissons 755. If you want group based access rights, you can do that in subdirectories.
ssh tunnels
Simple tunnel to port on remote host
ssh -L 1234:192.168.100.2:80 remotehost
And then connect to localhost:1234
Simple reverse tunnel
Give a host access to port on system you're on:
ssh -R 1234:localhost:22 you@the.other.host
Provide access to a server you can only reach from your desktop
Where S is the server you have firewall access on, and 192.168.150.223 the server you can only reach from office.
ssh -R S:1234:192.168.150.223:22 S
Remember to enable GatewayPorts on S and to allow access to port 1234
Systemd service for reverse tunnel
[Unit] Description=SSH Tunnel After=network.target
[Service] Restart=always RestartSec=20 User=root ExecStart=/bin/ssh -p 2222 -o ServerAliveInterval=30 -o ServerAliveCountMax=6 -o ExitOnForwardFailure=yes -gNR :10022:localhost:22 user@example.com
[Install] WantedBy=multi-user.target
So to ssh to remote server you use
ssh -p 10020 localhost
Copy public key to authorized_keys
ssh-copy-id
Run command on another system
ssh remotehost 'some command'
Open ssh url in firefox
Create script ~/runssh
#!/bin/bash # open ssh url url=$1 protocol=${url//:*/} machine=${url//*:\/\//} machine=${machine%/} konsole -e "$protocol $machine" # or for gnome: #/usr/bin/gnome-terminal -e "$protocol $machine"
In about:config set network.protocol-handler.app.ssh to ~/runssh
scp via intermediate host
scp -oProxyJump=intermediate thefile user@destination:/tmp
FAQ
Server side
key type ssh-rsa not in PubkeyAcceptedAlgorithms
PubkeyAcceptedKeyTypes +ssh-rsa
ssh multiplexing
https://www.cyberciti.biz/faq/linux-unix-reuse-openssh-connection
remember key passphrase
ssh-agent bash ssh-add ~/.ssh/id_rsa
root access from single host
Match Address 192.168.1.100 PermitRootLogin yes
The agent has no identities.
multihop tunnel
ssh -A -t -l user jump-host \ -L 8080:localhost:8080 \ ssh -A -t -l user webserver.dmz \ -L 8080:localhost:8080
OR in .ssh/config define
Host targethost ProxyCommand ssh jumphost -W %h:%p
and then just
ssh -L 1234:<LAN address>:<port> targethost
SSH tunnel with putty
https://www.skyverge.com/blog/how-to-set-up-an-ssh-tunnel-with-putty/
Failed publickey
- acccess rights?
14: No supported authentication methods available [preauth]
Putty not configured to look at correct private key?
bind Cannot assign requested address
Maybe try ssh -4, also check firewall
Unable to negotiate with 192.168.100.4 port 22: no matching cipher found.
passing old cipher, like -o arcfour??
no matching host key type found. their offer: ssh-rsa:
In your ~/ssh/config try
HostkeyAlgorithms +ssh-rsa
and maybe
PubkeyAcceptedAlgorithms +ssh-rsa
in .ssh/config
Error messages
scp: no matching key exchange method found.
scp seems to ignore .ssh/config, so use
scp -o Ciphers=xxx
scp: Received message too long
Something about defaulting to sftp and messing up forced commands expecting scp Try
scp -O
kex_exchange_identification: read: Connection reset by peer
only way to find out about that is look on server
bad ownership or modes for file authorized_keys
chmod 600 ~/.ssh/authorized_keys
Reverse tunnel with autossh
autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -fgNR :10023:localhost:22 the.server
And in the.server:/etc/ssh/sshd_config
GatewayPorts clientspecified
to allow connecting to 10023 from outside
As systemd service: In /etc/systemd/system/sshtunnel.service
[Unit] Description=SSH Tunnel After=network.target
[Service] Restart=always RestartSec=20 User=root ExecStart=/bin/ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=6 -gNR :10023:localhost:22 user@ssh.example.com
[Install] WantedBy=multi-user.target
The RSA host key for host has changed
If you're migrating to a new server: copy /etc/ssh/ssh_host_rsa_key* to the new server
ssh require both key and user password
In sshd_config AuthenticationMethods "publickey,password" # do not just set to no! #PasswordAuthentication yes
Or for just one user
Match User someuser AuthenticationMethods "publickey,password"
add your key to remote authorized_keys
ssh-copy-id remotehost
or, if not installed:
cat ~/.ssh/rsa_pub.id | ssh remotehost "cat >> ~/.ssh/authorized_keys"
Show key fingerprint
ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub
SSH Client side
no matching key exchange method found. Their offer: diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
kex_exchange_identification: banner line contains invalid characters
Sure you're talking to an ssh service?
ssh_exchange_identification: Connection closed by remote host
Force password prompt
When using pubkey:
ssh -o PubkeyAuthentication=no -o PreferredAuthentications=password
Permission denied (publickey).
Not much you can do on client side, server will probably have
PasswordAuthentication yes
so find an allowed key