There is no out of the box solution for this as of yet, so you do need to do something custom in order to achieve it.
There are two smart ways to achieve this.
1) Use AMPscript to store messages directly to Salesforce.
Create a custom object in Salesforce and link it to your Account object, this is going to be holding your SMS history.
In SMS, add AMPscript to create a new record in Salesforce. This can be stored to SMS header/footer for an example.
This method requires that one of your MobileConnect Demographic attributes holds Salesforce PersonContactID field value.
CreateSalesforceObject('SMS_tracking__c', 3, 'Phone’ ,MOBILE_NUMBER, 'MessageName', 'smsName', 'sentTime', now() )
2) Store the results to a Data Extension through AMPscript and configure Journey Builder to use this Data Extension to update/create new Salesforce records via SF event activities.
This method is slower, but gives you more flexibility.
However, note that you cannot ever know if the Contact actually opened the SMS, as this is tracked only by the carrier and is not provided back to Marketing Cloud. This means Marketing Cloud is only able to commit to show you either delivered/undelivered - which states if this SMS was delivered to the carrier or not.
AMPscript functions to look into: