Estou tentando criar um arquivo em lotes do Windows, que inicia o putty / plink com o encaminhamento de porta e nada mais. A parte do Windows está pronta até agora:
start plink.exe -ssh -i key.ppk -L 1234:localhost:80 sampleUser@192.168.0.1
Como não quero permitir a execução de outros comandos após a autenticação, estou usando ForceCommand
uma Match User
declaração:
Match User sampleUser
ForceCommand echo 'Success! Close this window to log out.'
O problema é que a execução do meu arquivo em lotes inicia a massa corretamente, mas fecha imediatamente após a execução do eco no texto especificado.
Minha ideia é usar algo assim:
ForceCommand echo 'Success! Close this window to log out.' && waitTillControlC
Dessa forma, o putty / SSH deve manter a conexão ativa e não sai do encaminhamento de porta.
Eu pensei em comandos como yes
, ping
ou read
, mas eles
- estão enviando spam para minha janela do terminal
- estão realmente fazendo coisas / gerando uma carga desnecessária na CPU
- fechar inesperadamente, se alguém pressionar enter
Existe um comando que não fará nada, para sempre, até que alguém o encerre com Ctrl + C ou feche a conexão SSH fechando a janela do putty?
Para que devo usar waitTillControlC
?
Respostas:
Eu não entendo por que todas as outras respostas querem usar um loop aqui, o sono é capaz de esperar o tempo suficiente para qualquer finalidade prática e não usará ciclos de relógio.
Por exemplo, ele tentará dormir aqui por cem anos duvidosos e provavelmente fará o suficiente para atender à solicitação de qualquer maneira:
Como alternativa, isso deve bloquear também até você digitar a Enterchave:
fonte
Experimente a
-N
opção. A partir daplink
documentação :Este é o mesmo comportamento da
ssh
opção-N
, conforme descrito na página do manual :fonte
I don't want to allow to execute other commands after authentication
.-N
faria isso no lado do cliente, para que você pudesse remover -N para executar outros comandos após a autenticação.Isso deve durar para sempre sem consumir qualquer quantidade (perceptível) de energia da CPU.
Também não tenho certeza se você pode dar um comando como na
ForceCommand
cláusula. Pode ser necessário colocar o comando em um script de shell.Obviamente, esse script deve estar em um local e ter permissões para que nenhum usuário comum no servidor possa gravá-lo.
Editar
Eu encontrei um comando que parece mais elegante:
tail -f
aguarda um arquivo ou fluxo retornar bytes. (Caso contrário, útil para assistir logs em tempo real.)/dev/null
Nunca retornará bytes. E assim o comando dormirá para sempre.fonte
ForceCommand echo 'congrats' && while true; do sleep 9999; done
tail -f /dev/null
é tecnicamente pior que o loop 9999. O processo será ativado a cada segundo, em vez de a cada 2 horas e 56 minutos.inotify
incorretamente?tail
é otimizada para alavancarinotify
quando disponível. Esse deve ser o caso padrão com a maioria, se não todas, das distribuições recentes o suficiente. No entanto, eu apenas testei em um laptop Linux e observei atividades espúrias com otail
monitoramento,/dev/null
por isso é certamente pior do que dormir em termos de ciclos de clock.tail
sempre acorde a cada segundo. Um possível motivo para o resultado é que você o está executando em um terminal que pode estar se comunicandotail
por qualquer motivo, enquantosleep
não o fará. Não há nenhuma razão pela qualtail
espuriosamente deva acordar apenas o monitoramento/dev/null
.Você pode simplesmente tentar o seguinte:
fonte
sleep
período será mais fácil para o CPU, embora aindasleep 1
deve ser bastante segura em qualquer coisa construída nos últimos duas décadas ...:
é uma abreviação detrue
. Eu também preferiria umsleep
período mais longo apenas por princípio.Você está tentando resolver isso do lado errado. Você não quer que o shell não saia, mas que a massa deixe a janela aberta.
http://the.earth.li/~sgtatham/putty/0.60/htmldoc/Chapter4.html#config-closeonexit - descreve exatamente o que você precisa alterar. Se você deseja usar a opção "somente na saída limpa", basta adicionar
exit 1
no final do ForceCommand.Edit: Eu entendi mal; você deseja apenas manter as portas encaminhadas, não deseja manter a saída do ForceCommand. Nesse caso, http://tartarus.org/~simon/putty-snapshots/htmldoc/Chapter4.html#config-ssh-noshell faz o que você deseja?
fonte