Running ssh on Amazon EC2 instance on port other than 22
amazon-ec2, cloud, ssh
Solution
To connect to an AWS instance through ssh from a port different than default 22:
- Open the security group of your instance so that it allows connections to that port from the source that you choose (0.0.0.0/0 for any source).
In your instance:
- It is a new instance you could use an user-data script like this one:
`#!/bin/bash -ex perl -pi -e 's/^#?Port 22$/Port 443/' /etc/ssh/sshd_config service sshd restart || service ssh restart`
Please note that this only works if you are launching a new instance:
User data scripts and cloud-init directives only run during the first boot cycle when an instance is launched.
- If it is not a new Instance, edit the `/etc/ssh/sshd_config` file adding/changing `Port 22` to the port that you want (i.e: `Port 443`) to connect through ssh and then do `service ssh restart` and you should be done.
Note: I did this with an Ubuntu instance, with another Linux instances may be slightly different.
Problem
I am not able to access Amazon EC2 instance via ssh as i am behind a firewall. So, i thought of running ssh on port other than 22, like 80 or 443. I tried starting Amazon EC2 instance via Web Management Console with following 'user data': ``` #!/bin/bash -ex perl -pi -e 's/^#?Port 22$/Port 80/' /etc/ssh/sshd_config service sshd restart || service ssh restart ``` The idea being that the above script would execute on instance startup and switch ssh from port 22 to port 80. (Ref: http://alestic.com/2010/12/ec2-ssh-port-80) But ssh is still not accessible on port 80. Apparently 'user data' script is not being executed on start up? I can 'only' start stop instances via Web Management Console, not from command-line (being behind firewall) Any ideas?