Pergunta

Estou tentando usar o PLINK como uma alternativa SSH no Windows, mas estou descobrindo que, quando o Plink se conecta a uma máquina Linux remota, ele não possui .bash_profile ou .bashrc.
Existe um arquivo de ponto diferente que eu deveria criar? Ou há outra opção?

Por exemplo, meu arquivo BASHRC adiciona um diretório ao meu caminho. Este diretório contém programas extras que eu quero usar, sendo um python.

Isso não vai funcionar:

plink host python

Onde isso vai:

plink host "source .bashrc;python"

Quando eu uso o PLINK sem um parâmetro de comando, ele obtém .bash_profile e tudo funciona bem, mas parece que apenas o envio de um comando plink não obtém nenhum arquivo.

Existe uma solução alternativa?

Foi útil?

Solução

Se você simplesmente se conectar a um host remoto via SSH ou Plink, ele iniciará o shell padrão da conta de login. Se esse shell for bash, o Bash obterá automaticamente .bash_profile.

Se você se conectar a um host remoto via SSH ou Plink solicitando um comando a ser executado, o SSH tentará executar exatamente esse comando.

O que você deseja alcançar pode ser feito usando um ForcedCommand. Veja também aqui:

Defina o comando forçado para ser um script que faça duas coisas:

  1. Fonte o .bash_profile
  2. Execute o comando original (Env vars $ ssh_original_command ou $ ssh2_original_command)

Outras dicas

A resposta aceita me ajudou a resolver o mesmo problema usando o Plink. Aqui está um pouco mais de detalhes que podem ajudar as pessoas no futuro:

Quando uma conexão SSH é feita para executar um único comando usando Plink, o Bash não é invocado como um "Shell de login interativo", para que não seja executado/etc/perfil, ~/.bash_profile, ~/.bash_login ou ~///// .Profile (veja as páginas manuais do Bash).

Para meus propósitos, eu precisava ser executado antes do comando passado na linha de comando Plink.

Um comando forçado pode ser adicionado ao arquivo Autorizado_Keys para essa chave (consulte as páginas manuais do SSHD). Um comando forçado (por exemplo, para executar ~/.profile), interrompe o comando especificado por Plink, para que ele faça as duas coisas, o comando forçado deve ser executar um script que executa .Profile e depois o comando plink original. O último é armazenado em uma variável de ambiente $ ssh_original_command para que seu script possa fazer

source .profile
$SSH_ORIGINAL_COMMAND

E você especifica o script no arquivo ~/.ssh/autorizado_keys da seguinte maneira, antes da chave, na mesma linha:

command="source forced_command.script" ssh-rsa A3AABzaC1yc...
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top