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 .bashrc
para 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
esource
o arquivo .bashrc_temp
:
user@remote$ source ~/.bashrc_temp
Agora você pode usar suas .bashrc
funçõ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 .bashrc
arquivo para /tmp
em 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 ssh
comando para fazer upload do .bashrc
arquivo, 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 ssh
quando não quiser obter e use sshs
quando quiser.
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.