SSH key Bitbucket pipeline
August 7, 2025 · AI Conversations
git@bitbucket.org: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
bitbucket-pipelines.yml
pipelines:
branches:
master:
– step:
name: Deploy to AWS EC2 Staging
image: ubuntu:latest
script:
# Update packages and install necessary tools
– apt-get update && apt-get install -y openssh-client git
# Optional: Verify SSH connection (Assuming SSH key is configured in Bitbucket settings)
– ssh -o StrictHostKeyChecking=no ubuntu@ec2-51-20-60-238.eu-north-1.compute.amazonaws.com "echo 'SSH-Verbindung erfolgreich'"
# Deployment: Pull the latest code from the development branch
– ssh ubuntu@ec2-51-20-60-238.eu-north-1.compute.amazonaws.com "
cd /var/www/vuefront &&
git fetch origin master &&
git reset –hard origin/master
"
### Steps to Resolve
#### 1. **Ensure SSH Key is Added in Bitbucket**
Bitbucket Pipelines runs in an isolated environment and does not automatically inherit your local SSH keys. You need to add an SSH key to your repository.
– In Bitbucket, go to **Repository Settings** → **SSH Keys**.
– Click **Add SSH Key**.
– If you haven't generated an SSH key for Bitbucket Pipelines, generate one by running the following in your local machine:
ssh-keygen -t rsa -b 4096 -C "bitbucket-pipelines" -f bitbucket-pipelines-key -N ""
– Add the **public key (`bitbucket-pipelines-key.pub`)** to Bitbucket under **Repository Settings → SSH Keys**.
– Add the **private key (`bitbucket-pipelines-key`)** as a **Repository Variable** in Bitbucket:
– Go to **Repository Settings → Repository Variables**.
– Create a variable named `BITBUCKET_SSH_KEY` and store the private key contents.
#### 2. **Configure Bitbucket Pipelines to Use SSH Key**
Modify your `bitbucket-pipelines.yml` to load the SSH key:
pipelines:
branches:
master:
- step:
name: Deploy to AWS EC2 Staging
image: ubuntu:latest
script:
# Update packages and install necessary tools
- apt-get update && apt-get install -y openssh-client git
# Add SSH key for authentication
- mkdir -p ~/.ssh
- echo "$BITBUCKET_SSH_KEY" > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- ssh-keyscan -t rsa bitbucket.org >> ~/.ssh/known_hosts
# Optional: Verify SSH connection
- ssh -o StrictHostKeyChecking=no ubuntu@ec2-51-20-60-238.eu-north-1.compute.amazonaws.com "echo 'SSH Connection Successful'"
# Deployment: Pull the latest code from the development branch
- ssh ubuntu@ec2-51-20-60-238.eu-north-1.compute.amazonaws.com "
cd /var/www/vuefront &&
git fetch origin master &&
git reset --hard origin/master
"
#### 3. **Ensure AWS EC2 Accepts Your SSH Key**
– Log into your EC2 instance and check if Bitbucket Pipelines’ public key is added to `~/.ssh/authorized_keys`:
cat ~/.ssh/authorized_keys
– If missing, manually add it:
echo "<YOUR_Bitbucket_Pipelines_PUBLIC_KEY>" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
#### 4. **Ensure Correct Git Remote URL**
On your EC2 instance, verify the correct SSH URL for your Bitbucket repository:
cd /var/www/vuefront
git remote -v
If it's using `https://`, change it to SSH:
git remote set-url origin git@bitbucket.org:yourusername/yourrepo.git
Now, run the pipeline again, and your deployment should work.
Let me know if you need further assistance! 🚀
### 🔹 **Fixing the Bitbucket SSH Authentication Issue on WSL & Pipelines**
—
## ✅ **1. Check If Your SSH Key Works Locally (WSL)**
Before fixing Bitbucket Pipelines, verify that your SSH key works from WSL.
1. **Check if an SSH key exists in WSL**:
ls -la ~/.ssh
If you don’t see `id_rsa` and `id_rsa.pub`, generate a new SSH key:
ssh-keygen -t rsa -b 4096 -C "bitbucket" -f ~/.ssh/id_rsa
2. **Add your SSH key to Bitbucket**:
– Copy your public key:
cat ~/.ssh/id_rsa.pub
– Go to **Bitbucket → Personal Settings → SSH Keys** and add the public key.
3. **Test the SSH connection from WSL**:
ssh -T git@bitbucket.org
If you see:
logged in as <your-bitbucket-username>.
Then SSH is working.
—
## ✅ **2. Ensure Bitbucket Uses SSH in WSL**
Check your Git remote to ensure it uses SSH instead of HTTPS:
cd /var/www/vuefront
git remote -v
If the output is:
origin https://bitbucket.org/yourusername/yourrepo.git (fetch)
origin https://bitbucket.org/yourusername/yourrepo.git (push)
Change it to SSH:
git remote set-url origin git@bitbucket.org:yourusername/yourrepo.git
—
## ✅ **3. Fix SSH Key for Bitbucket Pipelines**
Bitbucket Pipelines **runs in an isolated environment** and does not use your local SSH key. You need to configure it separately.
### **A. Generate a New SSH Key for Bitbucket Pipelines**
In **WSL**, run:
ssh-keygen -t rsa -b 4096 -C "bitbucket-pipelines" -f ~/.ssh/bitbucket-pipelines-key
This creates:
– **Private key:** `~/.ssh/bitbucket-pipelines-key`
– **Public key:** `~/.ssh/bitbucket-pipelines-key.pub`
### **B. Add the SSH Key to Bitbucket**
1. Open `~/.ssh/bitbucket-pipelines-key.pub`:
cat ~/.ssh/bitbucket-pipelines-key.pub
2. Copy the key and go to **Bitbucket → Repository Settings → SSH Keys → Add Key**.
3. Paste the public key (`bitbucket-pipelines-key.pub`).
### **C. Add the Private Key as a Repository Variable**
1. Go to **Bitbucket → Repository Settings → Repository Variables**.
2. Click **Add Variable**:
– **Name:** `BITBUCKET_SSH_KEY`
– **Value:** Copy and paste the contents of `~/.ssh/bitbucket-pipelines-key`
– **Mark as secured** (🔒)
—
## ✅ **4. Update `bitbucket-pipelines.yml`**
Modify your `bitbucket-pipelines.yml` file to use the SSH key:
pipelines:
branches:
master:
- step:
name: Deploy to AWS EC2 Staging
image: ubuntu:latest
script:
# Install necessary tools
- apt-get update && apt-get install -y openssh-client git
# Setup SSH Key for Authentication
- mkdir -p ~/.ssh
- echo "$BITBUCKET_SSH_KEY" > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- ssh-keyscan -t rsa bitbucket.org >> ~/.ssh/known_hosts
# Optional: Verify SSH connection
- ssh -o StrictHostKeyChecking=no ubuntu@ec2-51-20-60-238.eu-north-1.compute.amazonaws.com "echo 'SSH Connection Successful'"
# Deployment: Pull the latest code
- ssh ubuntu@ec2-51-20-60-238.eu-north-1.compute.amazonaws.com "
cd /var/www/vuefront &&
git fetch origin master &&
git reset --hard origin/master
"
—
## ✅ **5. Ensure EC2 Accepts Bitbucket Pipelines' SSH Key**
On your EC2 instance, check if the Bitbucket Pipelines **public key** is added:
cat ~/.ssh/authorized_keys
If the key is missing, **add it manually**:
echo "<YOUR_Bitbucket_Pipelines_PUBLIC_KEY>" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
—
## ✅ **6. Run the Pipeline Again**
Now, go to Bitbucket **→ Pipelines → Run Pipeline** and check if it successfully deploys.
—
### **🛠 Troubleshooting Tips**
1. **Check SSH Agent in WSL**
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa
Then try `ssh -T git@bitbucket.org` again.
2. **Ensure `git` and `ssh` are installed inside WSL**
sudo apt update && sudo apt install -y git openssh-client
3. **Enable SSH Debugging in Pipelines**
Modify `bitbucket-pipelines.yml`:
- ssh -vT git@bitbucket.org
This will give detailed logs.
—
### **🚀 Final Summary**
✅ **In WSL**:
– Check if SSH key is set up and working (`ssh -T git@bitbucket.org`).
– Ensure Git remote is using SSH (`git@bitbucket.org:yourusername/yourrepo.git`).
✅ **For Bitbucket Pipelines**:
– Create a new SSH key and add the **public key** in **Bitbucket SSH Keys**.
– Add the **private key** as `BITBUCKET_SSH_KEY` in **Repository Variables**.
– Modify `bitbucket-pipelines.yml` to load the SSH key.
✅ **On EC2**:
– Ensure the Bitbucket SSH key is in `~/.ssh/authorized_keys`.
Now, your deployment should work! 🚀🎯 Let me know if you need more help! 😊
—
## ✅ **1. Generate an SSH Key in Bitbucket (If Not Already Generated)**
Bitbucket provides a built-in SSH key for Pipelines. You can use that instead of generating a new key manually.
1. **Go to Bitbucket → Repository Settings → SSH Keys**.
2. **Under "SSH Keys for Pipelines"**, click **"Generate keys"**.
3. **Copy the public key (`bitbucket-pipelines.pub`)**.
—
## ✅ **2. Add the Bitbucket Public Key to AWS EC2**
To allow Bitbucket Pipelines to access your EC2 instance:
1. SSH into your EC2 instance:
ssh ubuntu@ec2-51-20-60-238.eu-north-1.compute.amazonaws.com
2. Open the **`authorized_keys`** file:
nano ~/.ssh/authorized_keys
3. **Paste the copied Bitbucket public key (`bitbucket-pipelines.pub`)** at the end of the file.
4. Save and exit (`CTRL + X`, then `Y`, then `ENTER`).
5. Ensure the correct permissions:
chmod 600 ~/.ssh/authorized_keys
—
## ✅ **3. Modify `bitbucket-pipelines.yml`**
Now, modify your pipeline script to use the **default Bitbucket SSH key**:
pipelines:
branches:
master:
- step:
name: Deploy to AWS EC2 Staging
image: ubuntu:latest
script:
# Install necessary tools
- apt-get update && apt-get install -y openssh-client git
# Use the built-in Bitbucket SSH key
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- ssh-keyscan -t rsa bitbucket.org >> ~/.ssh/known_hosts
- ssh -o StrictHostKeyChecking=no ubuntu@ec2-51-20-60-238.eu-north-1.compute.amazonaws.com "echo 'SSH Connection Successful'"
# Deployment: Fetch and reset latest code from Bitbucket
- ssh ubuntu@ec2-51-20-60-238.eu-north-1.compute.amazonaws.com "
cd /var/www/vuefront &&
git fetch origin master &&
git reset --hard origin/master
"
—
## ✅ **4. Ensure EC2 Accepts Bitbucket SSH Connection**
To test whether your EC2 instance can be accessed from Bitbucket Pipelines:
1. Run this in Bitbucket Pipelines **Manually**:
ssh -T ubuntu@ec2-51-20-60-238.eu-north-1.compute.amazonaws.com
If successful, it will show a message like:
Welcome to Ubuntu!
2. If you see a **Permission Denied** error:
– Make sure the **public key from Bitbucket is in `~/.ssh/authorized_keys`**.
– Ensure correct permissions: `chmod 600 ~/.ssh/authorized_keys`.
– Restart SSH service on EC2:
sudo systemctl restart ssh
—
## ✅ **5. Run Your Pipeline**
Now, go to **Bitbucket → Pipelines → Run Pipeline** and start your deployment!
—
## 🎯 **Final Summary**
✅ **Bitbucket SSH Key Setup**
– Use the **built-in SSH key** from **Bitbucket Repository → SSH Keys**.
– Copy the **public key** and add it to `~/.ssh/authorized_keys` in EC2.
✅ **EC2 Configuration**
– Ensure the key is added to `authorized_keys`.
– Set correct permissions (`chmod 600`).
– Restart SSH if needed.
✅ **Pipeline Configuration**
– Modify `bitbucket-pipelines.yml` to **use the default Bitbucket SSH key**.
🚀 **Now, your Bitbucket Pipeline will deploy to AWS EC2 automatically!** 🎯 Let me know if you need further help! 😊
origin git@bitbucket.org:tiw1988/vuefront.git (fetch)
origin git@bitbucket.org:tiw1988/vuefront.git (push)
ubuntu@ip-172-31-30-116:/var/www/vuefront$ git pull origin
git@bitbucket.org: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
—
## ✅ **1. Check Which SSH Key Your EC2 Instance is Using**
Run the following command on your EC2 instance to check which SSH key is being used:
ssh -v git@bitbucket.org
If you see an error like:
Permission denied (publickey).
It means Bitbucket does not recognize your SSH key.
—
## ✅ **2. Ensure the Correct SSH Key is Used**
Check if the SSH key exists:
ls -la ~/.ssh
If you do **not** see `id_rsa` and `id_rsa.pub`, you need to create an SSH key:
ssh-keygen -t rsa -b 4096 -C "bitbucket" -f ~/.ssh/id_rsa
Now, add the private key to the SSH agent:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
—
## ✅ **3. Add the Public Key to Bitbucket**
1. Get the public key:
cat ~/.ssh/id_rsa.pub
2. Copy the key and **add it to Bitbucket**:
– Go to **Bitbucket → Personal Settings → SSH Keys**.
– Click **"Add Key"** and paste the key.
—
## ✅ **4. Test SSH Connection to Bitbucket**
Run this command on EC2:
ssh -T git@bitbucket.org
If successful, you will see:
logged in as tiw1988.
If you still get **permission denied**, ensure you are using the correct private key:
ssh -i ~/.ssh/id_rsa -T git@bitbucket.org
—
## ✅ **5. Ensure Git Uses the Correct SSH Key**
Create or edit the SSH config file:
nano ~/.ssh/config
Add the following:
Host bitbucket.org
User git
IdentityFile ~/.ssh/id_rsa
StrictHostKeyChecking no
Save the file (`CTRL + X`, then `Y`, then `ENTER`).
Reload SSH agent:
ssh-add ~/.ssh/id_rsa
—
## ✅ **6. Try Pulling Again**
Now, try running:
git pull origin master
If everything is correct, it should work without any permission errors.
—
## 🎯 **Final Summary**
✔ **Ensure EC2 has the correct SSH key (`id_rsa`)**
✔ **Add the public key to Bitbucket under "Personal SSH Keys"**
✔ **Configure Git to use the correct SSH key**
✔ **Test with `ssh -T git@bitbucket.org`**
✔ **Run `git pull origin master` to verify the fix**
🚀 **Now, your EC2 instance should be able to pull from Bitbucket!** Let me know if you need more help! 😊
total 16
drwx—— 2 ubuntu ubuntu 4096 Mar 14 03:55 .
drwxr-x— 7 ubuntu ubuntu 4096 Mar 11 11:22 ..
-rw——- 1 ubuntu ubuntu 944 Mar 14 03:54 authorized_keys
-rw-r–r– 1 ubuntu ubuntu 142 Mar 11 11:50 known_hosts
—
## ✅ **1. Retrieve the Private Key from Bitbucket**
1. **Go to Bitbucket → Repository Settings → SSH Keys for Pipelines.**
2. **Click "View SSH Key"**.
3. **Copy the private key**.
—
## ✅ **2. Add the Private Key to EC2**
1. **Create a new private key file on EC2:**
nano ~/.ssh/id_rsa
2. **Paste the private key from Bitbucket** into the file.
3. **Save the file** (`CTRL + X`, then `Y`, then `ENTER`).
4. **Set correct permissions:**
chmod 600 ~/.ssh/id_rsa
—
## ✅ **3. Configure SSH to Use This Key**
Create or edit the SSH config file:
nano ~/.ssh/config
Add the following:
Host bitbucket.org
User git
IdentityFile ~/.ssh/id_rsa
StrictHostKeyChecking no
Save and exit.
Now, **reload the SSH agent**:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
—
## ✅ **4. Test SSH Connection to Bitbucket**
Run:
ssh -T git@bitbucket.org
If successful, you will see:
logged in as tiw1988.
—
## ✅ **5. Pull the Latest Code from Bitbucket**
Now, try:
cd /var/www/vuefront
git pull origin master
This should now work **without permission errors**! 🚀
—
### 🎯 **Final Fix Summary**
✔ **Copy the private key from Bitbucket and save it as `~/.ssh/id_rsa` on EC2**
✔ **Set correct permissions (`chmod 600 ~/.ssh/id_rsa`)**
✔ **Configure SSH to use the key in `~/.ssh/config`**
✔ **Test SSH connection with `ssh -T git@bitbucket.org`**
✔ **Run `git pull origin master` to verify the fix**
🚀 **Now, your EC2 instance can pull code from Bitbucket successfully!** 🎉 Let me know if you need further assistance! 😊
—
## ✅ **1. Generate a New SSH Key on EC2**
Since your EC2 instance **does not have a private SSH key (`id_rsa`)**, you need to generate one:
ssh-keygen -t rsa -b 4096 -C "bitbucket-ec2" -f ~/.ssh/id_rsa
– When prompted, **press ENTER** to accept the default location (`~/.ssh/id_rsa`).
– Leave the passphrase **empty** and press ENTER.
—
## ✅ **2. Add the Public Key to Bitbucket**
Now, get the public key:
cat ~/.ssh/id_rsa.pub
1. **Copy the output** of the above command.
2. **Go to Bitbucket → Personal Settings → SSH Keys**.
3. Click **Add Key**, paste the key, and save.
—
## ✅ **3. Configure SSH on EC2**
Edit your SSH config file:
nano ~/.ssh/config
Add the following:
Host bitbucket.org
User git
IdentityFile ~/.ssh/id_rsa
StrictHostKeyChecking no
Save the file (`CTRL + X`, then `Y`, then `ENTER`).
—
## ✅ **4. Test SSH Connection to Bitbucket**
Now, verify that EC2 can connect to Bitbucket:
ssh -T git@bitbucket.org
If successful, you will see:
logged in as tiw1988.
—
## ✅ **5. Pull the Latest Code from Bitbucket**
Now, try:
cd /var/www/vuefront
git pull origin master
🚀 **It should work now!**
—
## 🎯 **Final Fix Summary**
✔ **Generate a new SSH key (`id_rsa`) on EC2**
✔ **Add the public key to Bitbucket under "Personal SSH Keys"**
✔ **Configure SSH to use the key in `~/.ssh/config`**
✔ **Test SSH connection with `ssh -T git@bitbucket.org`**
✔ **Run `git pull origin master` to verify the fix**
Let me know if you need more help! 😊 🚀
authenticated via ssh key.
You can use git to connect to Bitbucket. Shell access is disabled
Now, try pulling the latest code from Bitbucket:
cd /var/www/vuefront
git pull origin master
### **🛠 If You Still Face Issues**
If you still get a **Permission Denied (publickey)** error when running `git pull`, try the following:
#### **1️⃣ Check if Git is Using SSH**
Run:
git remote -v
It should show:
origin git@bitbucket.org:tiw1988/vuefront.git (fetch)
origin git@bitbucket.org:tiw1988/vuefront.git (push)
If it still shows HTTPS instead of SSH, switch it:
git remote set-url origin git@bitbucket.org:tiw1988/vuefront.git
—
#### **2️⃣ Manually Specify SSH Key in Git**
Run:
GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa" git pull origin master
If that works, permanently set the SSH key for Git:
git config --global core.sshCommand "ssh -i ~/.ssh/id_rsa"
—
#### **3️⃣ Restart SSH Agent**
Ensure your key is being used by SSH:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
Then, retry:
git pull origin master
—
### 🚀 **Final Fix Summary**
✅ **Your EC2 instance is now authenticated with Bitbucket**
✅ **Ensure `git remote -v` is using SSH (`git@bitbucket.org`)**
✅ **Try `git pull origin master` now**
✅ **If issues persist, manually specify SSH key with `GIT_SSH_COMMAND`**
Now your deployment should work smoothly! 🎯 Let me know if you need more help! 😊
—
## ✅ **1. Create or Update `bitbucket-pipelines.yml`**
Add the following file to your repository:
pipelines:
branches:
master:
- step:
name: Deploy to AWS EC2
image: ubuntu:latest
script:
# Install necessary dependencies
- apt-get update && apt-get install -y openssh-client git
# Add SSH key from Bitbucket Pipelines
- mkdir -p ~/.ssh
- echo "$BITBUCKET_SSH_KEY" > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- ssh-keyscan -t rsa bitbucket.org >> ~/.ssh/known_hosts
# Connect to EC2 and deploy
- ssh -o StrictHostKeyChecking=no ubuntu@ec2-51-20-60-238.eu-north-1.compute.amazonaws.com "
cd /var/www/vuefront &&
git pull origin master &&
npm install &&
npm run build
"
—
## ✅ **2. Add SSH Key to Bitbucket Repository Variables**
1. **Go to Bitbucket → Repository Settings → Repository Variables**.
2. **Click "Add Variable"**:
– **Variable Name:** `BITBUCKET_SSH_KEY`
– **Value:** Paste your **EC2 private SSH key (`~/.ssh/id_rsa`)**.
– **Mark it as Secured (🔒).**
—
## ✅ **3. Add the Bitbucket Public Key to EC2**
1. **Go to Bitbucket → Repository Settings → SSH Keys → SSH Keys for Pipelines.**
2. **Copy the Public Key** (`bitbucket-pipelines.pub`).
3. **On your EC2 instance**, add the key to `authorized_keys`:
echo "<PASTE BITBUCKET PUBLIC KEY>" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
—
## ✅ **4. Run the Pipeline**
Now, whenever you push to the **`master` branch**, the pipeline will:
1. Connect to EC2 via SSH.
2. Pull the latest code from Bitbucket.
3. Install dependencies and build the project.
You can manually trigger a pipeline by going to **Bitbucket → Pipelines → Run Pipeline**.
—
## 🎯 **Final Summary**
✔ **Create `bitbucket-pipelines.yml` for deployment**
✔ **Add the private SSH key (`BITBUCKET_SSH_KEY`) to Bitbucket variables**
✔ **Add Bitbucket’s public key to EC2 `authorized_keys`**
✔ **Run the pipeline and check deployment**
🚀 **Now, every time you push code, Bitbucket Pipelines will deploy to EC2!** 🎯 Let me know if you need help! 😊
pipelines:
branches:
master:
– step:
name: Deploy to AWS EC2 Staging
image: ubuntu:latest
script:
# Update packages and install necessary tools
– apt-get update && apt-get install -y openssh-client git
# Optional: Verify SSH connection (Assuming SSH key is configured in Bitbucket settings)
– ssh -o StrictHostKeyChecking=no ubuntu@ec2-51-20-60-238.eu-north-1.compute.amazonaws.com "echo 'SSH-Verbindung erfolgreich'"
# Deployment: Pull the latest code from the development branch
– ssh ubuntu@ec2-51-20-60-238.eu-north-1.compute.amazonaws.com "
cd /var/www/vuefront &&
git fetch origin master &&
git reset –hard origin/master
"
pipelines:
branches:
master:
- step:
name: Deploy to AWS EC2 Staging
image: ubuntu:latest
script:
# Update and install necessary dependencies
- apt-get update && apt-get install -y openssh-client git
# Setup SSH Key for authentication
- mkdir -p ~/.ssh
- echo "$BITBUCKET_SSH_KEY" > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- ssh-keyscan -H bitbucket.org >> ~/.ssh/known_hosts
- ssh-keyscan -H ec2-51-20-60-238.eu-north-1.compute.amazonaws.com >> ~/.ssh/known_hosts
# Verify SSH connection to EC2 instance
- ssh -o StrictHostKeyChecking=no ubuntu@ec2-51-20-60-238.eu-north-1.compute.amazonaws.com "echo 'SSH Connection Successful'"
# Deployment: Pull the latest code and restart application (if needed)
- ssh ubuntu@ec2-51-20-60-238.eu-north-1.compute.amazonaws.com << 'EOF'
cd /var/www/vuefront
git fetch origin master
git reset --hard origin/master
git pull origin master
# Optional: Install dependencies and restart application
if [ -f package.json ]; then
npm install --omit=dev
npm run build
fi
# Restart application or services if needed
sudo systemctl restart apache2 || sudo systemctl restart nginx || echo "No web server detected."
EOF
—
### ✅ **Improvements in This Version**
1. **Secure SSH Key Handling**
– Uses `$BITBUCKET_SSH_KEY` stored as a **Bitbucket repository variable** to avoid storing private keys in the repo.
– Sets correct permissions (`chmod 600 ~/.ssh/id_rsa`).
2. **More Reliable SSH Connection**
– **Avoids host key issues** by adding both **Bitbucket and EC2** to `known_hosts` before connecting.
3. **Ensures the Deployment Works**
– Runs `git pull origin master` after `git reset` to ensure the latest code is retrieved.
4. **Handles Frontend Applications**
– Installs dependencies (`npm install –omit=dev`) if `package.json` is present.
– Builds the frontend (`npm run build`) if needed.
5. **Restarts Web Server (If Needed)**
– Detects whether **Apache or Nginx** is running and restarts the service after deployment.
—
### ✅ **Next Steps**
1. **Add the Private Key to Bitbucket**:
– Go to **Bitbucket → Repository Settings → Repository Variables**.
– Create a variable named `BITBUCKET_SSH_KEY` and paste the **EC2 private key (`~/.ssh/id_rsa`)**.
2. **Ensure EC2 Authorizes the Key**:
– Go to your **EC2 instance** and add the **Bitbucket public key (`bitbucket-pipelines.pub`)** to:
nano ~/.ssh/authorized_keys
3. **Run the Pipeline**:
– Push changes to `master` or manually trigger it from **Bitbucket → Pipelines → Run Pipeline**.
—
### 🚀 **Now your Bitbucket Pipelines will deploy the latest code to AWS EC2 automatically!** Let me know if you need further modifications. 😊
if [ -f package.json ]; then
npm install –omit=dev
npm run build
fi
# Restart application or services if needed
sudo systemctl restart apache2 || sudo systemctl restart nginx || echo "No web server detected."
EOF
pipelines:
branches:
master:
- step:
name: Deploy to AWS EC2 Staging
image: ubuntu:latest
script:
# Update and install necessary dependencies
- apt-get update && apt-get install -y openssh-client git
# Setup SSH Key for authentication
- mkdir -p ~/.ssh
- echo "$BITBUCKET_SSH_KEY" > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- ssh-keyscan -H bitbucket.org >> ~/.ssh/known_hosts
- ssh-keyscan -H ec2-51-20-60-238.eu-north-1.compute.amazonaws.com >> ~/.ssh/known_hosts
# Verify SSH connection to EC2 instance
- ssh -o StrictHostKeyChecking=no ubuntu@ec2-51-20-60-238.eu-north-1.compute.amazonaws.com "echo 'SSH Connection Successful'"
# Deployment: Pull the latest code
- ssh ubuntu@ec2-51-20-60-238.eu-north-1.compute.amazonaws.com << 'EOF'
cd /var/www/vuefront
git fetch origin master
git reset --hard origin/master
git pull origin master
EOF
—
### ✅ **Changes & Improvements**
✔ **Removed npm install and build steps**
✔ **Removed web server restart logic**
✔ **Retained SSH security improvements (known_hosts setup)**
✔ **Ensured the latest code is fetched and reset on EC2**
🚀 **Now your pipeline will only deploy the latest code without additional build or restart operations!** Let me know if you need any more changes! 😊
The issue comes from the incorrect use of the `EOF` block in your script. The `
pipelines:
branches:
master:
- step:
name: Deploy to AWS EC2 Staging
image: ubuntu:latest
script:
# Update and install necessary dependencies
- apt-get update && apt-get install -y openssh-client git
# Setup SSH Key for authentication
- mkdir -p ~/.ssh
- echo "$BITBUCKET_SSH_KEY" > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- ssh-keyscan -H bitbucket.org >> ~/.ssh/known_hosts
- ssh-keyscan -H ec2-51-20-60-238.eu-north-1.compute.amazonaws.com >> ~/.ssh/known_hosts
# Verify SSH connection to EC2 instance
- ssh -o StrictHostKeyChecking=no ubuntu@ec2-51-20-60-238.eu-north-1.compute.amazonaws.com "echo 'SSH Connection Successful'"
# Deployment: Pull the latest code
- ssh ubuntu@ec2-51-20-60-238.eu-north-1.compute.amazonaws.com << EOF
cd /var/www/vuefront
git fetch origin master
git reset --hard origin/master
git pull origin master
EOF
—
## ✅ **Fixes & Improvements**
✔ **Moved `
branches:
master:
– step:
name: Deploy to AWS EC2 Staging
image: ubuntu:latest
script:
# Update packages and install necessary tools
– apt-get update && apt-get install -y openssh-client git
# Setup SSH Key for authentication
– mkdir -p ~/.ssh
– echo "$BITBUCKET_SSH_KEY" > ~/.ssh/id_rsa
– chmod 600 ~/.ssh/id_rsa
– ssh-keyscan -H bitbucket.org >> ~/.ssh/known_hosts
– ssh-keyscan -H $EC2_HOST >> ~/.ssh/known_hosts
# Optional: Verify SSH connection (Assuming SSH key is configured in Bitbucket settings)
– ssh -o StrictHostKeyChecking=no $EC2_USER@$EC2_HOST "echo 'SSH-Verbindung erfolgreich'"
# Deployment: Pull the latest code from the development branch
– ssh $EC2_USER@$EC2_HOST "
cd /var/www/vuefront &&
git fetch origin master &&
git reset –hard origin/master
"
above is the file works fine
### ✅ **Final Summary of Your Pipeline Fixes**
✔ **Proper SSH key authentication using `BITBUCKET_SSH_KEY`**
✔ **Dynamic environment variables (`$EC2_USER` and `$EC2_HOST`) for flexibility**
✔ **Proper `ssh` commands to deploy code on EC2**
✔ **Fixed syntax issues (`EOF` handling and command chaining)**
### 🎯 **Next Steps**
– If you haven't already, **add** the environment variables in **Bitbucket Repository Settings → Repository Variables**:
1. **`BITBUCKET_SSH_KEY`** → **Private Key** from EC2 (`~/.ssh/id_rsa`)
2. **`EC2_USER`** → `"ubuntu"`
3. **`EC2_HOST`** → `"ec2-51-20-60-238.eu-north-1.compute.amazonaws.com"`
– Whenever you push to the `master` branch, **Bitbucket Pipelines will now deploy automatically to EC2**. 🚀
If you ever need enhancements like:
– Running `npm install && npm run build`
– Restarting services (`sudo systemctl restart apache2/nginx`)
– Running Laravel migrations (`php artisan migrate –force`)
Let me know, and I’ll help you refine the pipeline! 😊
—
## ✅ **Updated `bitbucket-pipelines.yml` to Deploy Multiple Repos**
Modify your pipeline configuration to **deploy two repositories**:
pipelines:
branches:
master:
- step:
name: Deploy VueFront to AWS EC2
image: ubuntu:latest
script:
# Update packages and install necessary tools
- apt-get update && apt-get install -y openssh-client git
# Setup SSH Key for authentication
- mkdir -p ~/.ssh
- echo "$BITBUCKET_SSH_KEY" > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- ssh-keyscan -H bitbucket.org >> ~/.ssh/known_hosts
- ssh-keyscan -H $EC2_HOST >> ~/.ssh/known_hosts
# Deploy VueFront repo to /var/www/vuefront
- ssh $EC2_USER@$EC2_HOST "
cd /var/www/vuefront &&
git fetch origin master &&
git reset --hard origin/master
"
- step:
name: Deploy Syt to AWS EC2
image: ubuntu:latest
script:
# Update packages and install necessary tools
- apt-get update && apt-get install -y openssh-client git
# Setup SSH Key for authentication
- mkdir -p ~/.ssh
- echo "$BITBUCKET_SSH_KEY" > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- ssh-keyscan -H bitbucket.org >> ~/.ssh/known_hosts
- ssh-keyscan -H $EC2_HOST >> ~/.ssh/known_hosts
# Deploy Syt repo to /var/www/syt
- ssh $EC2_USER@$EC2_HOST "
cd /var/www/syt &&
git fetch origin master &&
git reset --hard origin/master
"
—
## ✅ **How This Works**
– **Two Deployment Steps:**
– First step **deploys VueFront** (`/var/www/vuefront`).
– Second step **deploys Syt** (`/var/www/syt`).
– **Same EC2 Instance:** Both deployments happen on **the same EC2 server**.
– **Environment Variables for Flexibility:**
– `BITBUCKET_SSH_KEY`: The private SSH key for Bitbucket.
– `EC2_USER`: The SSH username (e.g., `"ubuntu"`).
– `EC2_HOST`: The **EC2 public hostname or IP** (e.g., `"ec2-51-20-60-238.eu-north-1.compute.amazonaws.com"`).
—
## ✅ **Next Steps**
1. **Ensure the `/var/www/syt` folder exists on EC2**:
ssh ubuntu@ec2-51-20-60-238.eu-north-1.compute.amazonaws.com "mkdir -p /var/www/syt"
2. **Verify Git Remote for `/var/www/syt`**:
cd /var/www/syt
git remote -v
– If it’s missing or incorrect, set it:
git remote set-url origin git@bitbucket.org:yourusername/syt.git
3. **Ensure the `BITBUCKET_SSH_KEY` is added as a repository variable** in Bitbucket.
—
## 🚀 **Now, your Bitbucket Pipelines will deploy two repositories to different folders on EC2!**
Let me know if you need any refinements! 😊
—
## ✅ **Pipeline for Repository: `VueFront`**
This pipeline is added inside **`vuefront` repository** and will deploy code to **`/var/www/vuefront`**.
**📌 `vuefront` repo → Deploy to `/var/www/vuefront`**
pipelines:
branches:
master:
- step:
name: Deploy VueFront to AWS EC2
image: ubuntu:latest
script:
# Install necessary tools
- apt-get update && apt-get install -y openssh-client git
# Setup SSH Key for authentication
- mkdir -p ~/.ssh
- echo "$BITBUCKET_SSH_KEY" > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- ssh-keyscan -H bitbucket.org >> ~/.ssh/known_hosts
- ssh-keyscan -H $EC2_HOST >> ~/.ssh/known_hosts
# Deploy VueFront repository to /var/www/vuefront
- ssh $EC2_USER@$EC2_HOST "
cd /var/www/vuefront &&
git fetch origin master &&
git reset --hard origin/master
"
—
## ✅ **Pipeline for Repository: `Syt`**
This pipeline is added inside **`syt` repository** and will deploy code to **`/var/www/syt`**.
**📌 `syt` repo → Deploy to `/var/www/syt`**
pipelines:
branches:
master:
- step:
name: Deploy Syt to AWS EC2
image: ubuntu:latest
script:
# Install necessary tools
- apt-get update && apt-get install -y openssh-client git
# Setup SSH Key for authentication
- mkdir -p ~/.ssh
- echo "$BITBUCKET_SSH_KEY" > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- ssh-keyscan -H bitbucket.org >> ~/.ssh/known_hosts
- ssh-keyscan -H $EC2_HOST >> ~/.ssh/known_hosts
# Deploy Syt repository to /var/www/syt
- ssh $EC2_USER@$EC2_HOST "
cd /var/www/syt &&
git fetch origin master &&
git reset --hard origin/master
"
—
## ✅ **How This Works**
– **Each repository has its own pipeline**:
– **`vuefront` repo** → Deploys to **`/var/www/vuefront`**
– **`syt` repo** → Deploys to **`/var/www/syt`**
– **Each repo has its own `bitbucket-pipelines.yml` file** (no conflicts).
– **Separate pipeline executions** whenever you push to `master` in each repository.
—
## ✅ **Setup Environment Variables in Bitbucket**
For **each repository**, add the following environment variables in **Bitbucket → Repository Settings → Repository Variables**:
| Variable Name | Value |
|———————-|————————————————|
| `BITBUCKET_SSH_KEY` | Private SSH key from EC2 (`~/.ssh/id_rsa`) |
| `EC2_USER` | `"ubuntu"` |
| `EC2_HOST` | `"ec2-51-20-60-238.eu-north-1.compute.amazonaws.com"` |
—
## ✅ **Final Steps**
1. **Ensure that both `/var/www/vuefront` and `/var/www/syt` exist on EC2**:
ssh ubuntu@ec2-51-20-60-238.eu-north-1.compute.amazonaws.com "mkdir -p /var/www/vuefront /var/www/syt"
2. **Ensure both repositories have the correct Git remote on EC2**:
cd /var/www/vuefront
git remote set-url origin git@bitbucket.org:yourusername/vuefront.git
cd /var/www/syt
git remote set-url origin git@bitbucket.org:yourusername/syt.git
3. **Push code to `master` branch in each repository** to trigger the pipelines.
—
## 🚀 **Now, each repository will deploy independently to its respective folder!**
Let me know if you need further adjustments! 😊