No Ubuntu 11.10, descobri que podia bloquear os comandos ssh, enviados com e sem -T, e bloquear a cópia do scp, enquanto permitia o encaminhamento de portas.
Especificamente, tenho um redis-server em "somehost" vinculado a localhost: 6379 que desejo compartilhar com segurança por meio de túneis ssh com outros hosts que têm um arquivo de chave e irão ssh com:
$ ssh -i keyfile.rsa -T -N -L 16379:localhost:6379 someuser@somehost
Isso fará com que o redis-server, "localhost" porta 6379 em "somehost" apareça localmente no host que está executando o comando ssh, remapeado para "localhost" porta 16379.
No remoto "somehost" Aqui está o que usei para authorized_keys:
cat .ssh/authorized_keys (portions redacted)
no-pty,no-X11-forwarding,permitopen="localhost:6379",command="/bin/echo do-not-send-commands" ssh-rsa rsa-public-key-code-goes-here keyuser@keyhost
O no-pty tropeça na maioria das tentativas de ssh que desejam abrir um terminal.
O permitopen explica quais portas podem ser encaminhadas, neste caso a porta 6379, a porta do redis-server que eu queria encaminhar.
O comando = "/ bin / echo do-not-send-command" ecoa de volta "do-not-send-command" se alguém ou algo conseguir enviar comandos para o host via ssh -T ou outro.
Em um Ubuntu recente man sshd
, authorized_keys / command é descrito a seguir:
command = "command" Especifica que o comando é executado sempre que esta chave é usada para autenticação. O comando fornecido pelo usuário (se houver) é ignorado.
As tentativas de usar a cópia de arquivo seguro scp também falharão com um eco de "do-not-send-comandos". Descobri que o sftp também falha com esta configuração.
Acho que a sugestão de shell restrito, feita em algumas respostas anteriores, também é uma boa ideia. Além disso, eu concordaria que tudo o que está detalhado aqui pode ser determinado lendo "man sshd" e pesquisando nele por "authorized_keys"
no-pty
não permita a abertura da seção interativa, não impede a execução do comando, de modo que o usuário pode editar oauthorized_keys
arquivo se tiver acesso com algo semelhantessh server 'sed -i -e s/no-pty// ~/.ssh/authorized_keys'
.