carregando aliases de shell locais para sessão ssh dinamicamente

carregando aliases de shell locais para sessão ssh dinamicamente

Quando eu faço login em alguma máquina usandosshEu desejo que meuapelidoefunçõesexistem. Em outras palavras, faça login em alguma máquina na qual desejo poder usar meus atalhos de comando.

Preciso que seja dinâmico, toda vez que faço login desejo ter aliases atualizados.

Notas: Muitas vezes é o primeiro login, sem conhecer a máquina e os arquivos ali existentes. Às vezes é um login único. Apenas uma vez para aquela máquina. Ele precisa ser limpo posteriormente, a configuração anterior também deve ser restaurada.

Responder1

Você pode copiar temporariamente seu arquivo .bashrcpara sua máquina remota com outro nome. Por exemplo, usando .bashrc_temp:

user@local$ scp .bashrc user@remote:~/.bashrc_temp

Depois você pode fazer login na máquina remota:

user@local$ ssh user@remote

esourceo arquivo .bashrc_temp:

user@remote$ source ~/.bashrc_temp

Agora você pode usar suas .bashrcfunções. Quando terminar seu trabalho, você pode remover o arquivo ~/.bashrc_temp da máquina remota e fazer logout.

A cópia do arquivo e o login na máquina remota podem ser feitos com uma função bash:

# copy the .bashrc to the remote machine 
# and log into the remote machine.
# parameter $1: user@remote
function s() {
  scp ~/.bashrc $1:~/.bashrc_temp
  ssh $1
}

Atualizar:

Você também pode considerar copiar o .bashrcarquivo para /tmpem sua máquina remota e fonte /tmp/.bashrc_temp.

Atualização 2:

Você pode fazer login na máquina remota usandossh-t. Isso usará automaticamente seu temp .bashrc. Função atualizada s():

function s() {
  scp ~/.bashrc $1:/tmp/.bashrc_temp
  ssh -t $1 "bash --rcfile /tmp/.bashrc_temp ; rm /tmp/.bashrc_temp"
}

Responder2

Acho que sshrc é o que você está procurando: https://github.com/Russell91/sshrc

sshrc funciona como ssh, mas também origina ~/.sshrc após efetuar login remotamente.

$ echo "echo welcome" > ~/.sshrc
$ sshrc me@myserver
welcome

$ echo "alias ..='cd ..'" > ~/.sshrc
$ sshrc me@myserver
$ type ..
.. is aliased to `cd ..'

Você pode usar isso para definir variáveis ​​de ambiente, definir funções e executar comandos pós-login. É simples assim e não afetará outros usuários no servidor - mesmo que eles também usem sshrc. Para uma configuração mais avançada, continue lendo.

Responder3

jens-na forneceu uma excelente resposta. Passei um pouco de tempo e refiz um pouco para funcionar um pouquinho melhor. Dessa forma, você pode passar qualquer parâmetro para o SSH, como números de porta. A diferença é que ele usa o sshcomando para fazer upload do .bashrcarquivo, em vez de scp, que usa nomes de parâmetros de comando diferentes.

Você também notará que ele carrega um arquivo diferente, .bashrc_remote, para que você possa selecionar exatamente o que deseja obter em servidores remotos, em vez de tudo

sshs() {
        ssh $@ "cat > /tmp/.bashrc_temp" < ~/.bashrc_remote
        ssh -t $@ "bash --rcfile /tmp/.bashrc_temp ; rm /tmp/.bashrc_temp"
}

Execute-o da seguinte maneira:

sshs user@server

O nome ' sshs' é para "Fonte SSH". Use sshquando não quiser obter e use sshsquando quiser.

https://gist.github.com/jonahbron/5549848

Responder4

Isto é o que eu inventei. Ele permite que você mantenha um arquivo rc normal, mas também faça tudo em uma conexão ssh (ou seja, só precisa fazer login uma vez, em vez de fazer um scp primeiro).

#copies some environment over to the remote machine
function ssh() {
  /usr/bin/ssh -t $* "echo `base64 -i ~/bin/remote_ssh_env.sh` | base64 --decode > /tmp/remote_ssh_env.sh; bash --rcfile /tmp/remote_ssh_env.sh"
}

Não tenho certeza de quão grande esse arquivo rc pode ser, já que ele pode atingir o máximo em algum momento.

informação relacionada