以最方便的方式SSH,无需每次都输入ssh命令

时间:2013-09-07 17:52:00

标签: macos ssh

我经常需要登录远程服务器并进行各种工作。我正在使用我的Mac,每次我必须输入一个长命令才能这样做。

ssh -i ~/key.pem ubuntu@255.255.255.255

我想知道在没有每天输入命令的情况下登录远程服务器的最简单方法是什么。

也欢迎使用方便的苹果应用

更新:

1>感谢Matt Bryant的回答。我通过修改〜/ .ssh / config(默认情况下不存在)成功避免输入整个用户名和主机地址

Host <ShortName>
    User <UserName>
    HostName <HostIP>
    IdentityFile <KeyPath>

然后我可以输入此命令以避免输入主机的全名和密钥的完整路径:

ssh <ShortName> 

2 - ;任何人都知道如何存储pem键或者如果没有pem键则避免输入密码?

2 个答案:

答案 0 :(得分:5)

使用〜/ .ssh / config文件。尝试添加以下内容:

Host server                                                                                                  
    User ubuntu
    HostName 255.255.255.255

这将允许您使用ssh -i ~/key.pem server登录。如果您查找ssh配置,还有许多其他设置可以让您简化和增强您的ssh体验。

答案 1 :(得分:1)

嗨B MR W是的,我会发布一个期望脚本,因为这出现了很多:

E2A说明适用于linux mac https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/expect.1.html有望 这可能意味着弄乱脚本以满足mac的标准,期望我对此没有足够的了解,但原则上看看下面的过程应该有效

您对ssh-copy-id或脚本感兴趣的是哪一位?

要获得一个脚本,你需要

sudo-apt-get install expect or 
sudo yum install expect

安装后

这是一个典型的脚本:

#!/usr/bin/expect -f


set force_conservative 1  
if {$force_conservative} {
        set send_slow {1 .001}
        proc send {ignore arg} {
        sleep .001
                exp_send -s -- $arg
        }
}

;# Validate user input - make sure all fields required are given 
if {$argc >= 1} {
    ;# Setting  password
    set user "MYUSER";
    set supass "MYPASSWORD"

    set host [lindex $argv 0]
  #     set command1 [lindex $argv 2]

   set prompt "(:|#|%|>|\\\$|% |# |> |\\\$ )"
   set prompt1 "(>)"
   set timeout -1
   ;###############################################################

   ;#connect to specified host given by addstaff or globalstaff.
   spawn ssh $user@$host
   expect { 
        "*word:*" {}
        "*(yes/no)?*" {
                      send - "yes\r" 
                  expect "*word:" { }

                  } 
       }          

   send  - "$supass\r"
  expect eof exit -re $prompt

   send -  "sudo bash\r"
   expect   {
                 "*word:*" {
                         send  "$supass\r"
                         expect  eof exit -re $prompt
                 }
        "*" {  
              expect eof exit -re $prompt
        }

   }

    send  - "whoami\r"
        expect eof exit -re $prompt

    interact 

    ;#send  - "$command\r"
    ;#  expect eof exit -re $prompt

    ;#Logout of current ssh session
    ;#send  - "exit\r"
    ;#expect eof exit -re $prompt

    ;#send  - "exit\r"
    ;#expect eof exit -re $prompt


} else {
  send - "echo Sorry require user host command \n\n\r";
  exit
} 

如果您注意到我已经注释掉了未发送的命令 - 它使用交互模式允许您在没有密码的情况下实际登录,在脚本顶部定义用户密码...一旦登录你按照正常的ssh键入

这是我在本地运行它:

 whoami
myuser
./ssh-connection.exp localhost
spawn ssh myuser@localhost
myuser@localhost's password: 
Welcome to Ubuntu 12.04.2 LTS (GNU/Linux XXXX)

 * Documentation:  https://help.ubuntu.com/

Last login: Sat Sep  7 20:19:53 2013 from localhost
sudo bash
This is BASH 4.2- DISPLAY on localhost:0.0

Sat Sep  7 20:25:09 BST 2013
whoami
[20:25 myuser@myuser-DP ~] > sudo bash
whoami
This is BASH 4.2- DISPLAY on localhost:0.0

Sat Sep  7 20:25:09 BST 2013
[20:25 myuser@myuser-DP ~] > whoami
root
[20:25 myuser@myuser-DP ~] > whoami
root

在脚本中它也会执行sudo bash,这就是为什么它将我重新连接到localhost并成为root